Reference: Java Virtual Machineλ︎
Understand the configuration options for the Java Virtual machine (JVM) which Clojure is hosted upon.
Overview of tools for monitoring and profiling Clojure applications running on the JVM, to ensure effective running of Clojure applications in production.
- Common JVM Options - for development and deployment
- JVM Profiling tools - understand resources and help diagnose run-time problems
JDK_JAVA_OPTIONS Environment Variable
JDK_JAVA_OPTIONS is the official Environment Variable for setting options when calling
javac and other Java commands to start running a Java Virtual Machine (Java version 9 onward).
Display resources available to the JVMλ︎
-XshowSettings:system displays the resources the JVM believes it has access too when running any Java command and is a very simple diagnostic tool to start with.
See the environment resources available to the JVM without running a Clojure or Java application:
-XshowSettings:system when running any Java command to provide simple diagnostics, e.g. when running a Clojure Uberjar
Print resources in Container systems
-XshowSettings:system is especially useful for environments which may vary in resources available, such as containers (Docker, Kubernettes, etc.)
JVM option typesλ︎
-X - nonstandard VM options
-XX standard VM options
-XX options are not checked for validity, so are ignored if the VM does not recognize the option. Options can therefore be used across different VM versions without ensuring a particular level of the VM.
-D a system property for the application running on the JVM using a name=value
Java 9 introduced modules to move features out of JVM itself and include them as optional modules.
Before CLJS-2377 issue was resolved, ClojureScript (2017) depended on
java.xml.bind package was deprecated in Java 9 and moved to a non-default module.
At that time, compiling a ClojureScript project without adding the java.xml.bind module would return the error:
clojure J--add-modules "java.xml.bind" command line option will include the module
:jvm-opts ["--add-modules" "java.xml.bind"] added to Clojure CLI deps.edn or Leiningen project.clj file will include the module.
-Djdk.launcher.addmods=java.xml.bind added to the
JAVA_TOOL_OPTIONS environment variable (
--add-modules doesn’t work in
Unified Logging sub-systemλ︎
-Xlog - JEP 158