There are hundreds of
JVM Optionsexists inside sun JDK and its virtually impossible to keep track of every single
JVM option andbased on my experiencewe don'tevenuse most of JVM flags except couple of important JVM option related to java heap size, java options for printing garbage collection details and most likely JVM switches for setting up remote debugging in Java. but there are many other useful category of JVM parameters which you at least like to be familiar even if not intending to use it more frequently. In this article we will see examples of 10 different categories of
JVM parameter which I found useful and use more frequently than other. I would recommend to get a full knowledge of what does a particular JVM options does by referring official list of JVM options.
On the basis of how we specify
JVM option it can be divided into two parts, JVM Options which starts with –X and those which starts with -XX:
JVMOptions that begin with -Xare non-standard (thy arenot guaranteed to be supported on allJVM implementations), and are subject to change without notice in subsequent releases of the JDK.
JVMOptionsor parameterswhichare specified with -XXare not stable and are not recommended for casual use. These options are subject to change without notice also.
I was thinking about writing post on JVM options when I completed my post on
Java Heap Size and
Java Garbage Collection because these are two main area where we see usages of various JVM flags. But it didn’t happened even after I covered OutOfMemoryError post which hassome
JVM option to solve OutOfMemoryError in Java. Now I am happy that I have completed this piece of information and its ready to be published. As always I look for your feedback, suggestions and any other JVM flags which I have missed and you guys find useful to share.
Good knowledge of JVM options specially related to GC tuning is important for time critical application e.g.
high volume low latency electronic trading platform where every micro seconds matter. though getting right combination requires lot of profiling and trial and error and depends heavily on nature of trading application.
Important Points about JVM Options:
1) Boolean JVM optionscan be turned on with -XX:+ andcan beturned off with -XX:-.
2) Numeric JVM Options can beset with -XX:=. Numbers can include 'm' or 'M' for megabytes, 'k' or 'K' for kilobytes, and 'g' or 'G' for gigabytes (for example, 32k is the same as 32768).
3) String JVM optionscan besetby using-XX:=,andusually used to specify a file, a path, or a list of commands.
java -help lists the standard options (standard across different JVM implementations) for the Java application launcher. The
command java -X can be used to see the Java application launcher's non-standard (X for extension specific to that JVM) arguments.The -X options are non-standard and subject to change without notice. If you wish to detect which JVM arguments your currently running Java application is using, you can use the ManagementFactory.getRuntimeMXBean().getInputArguments()
Now here is my list of important JVM flags, switches, options or parameters which is most commonly used while running Java applications:
Xbootclasspathspecifies classpath entries you want loaded without verification. The JVM verifies all classes it loads to ensure they don't try to dereference an object with an int, pop extra entries off the stack or push too many, and so on. This verification is part of the reason why the JVM is very stable, but it's also rather costly, and responsible for a large part of start up delay. Putting classes on the bootclasspath skips this cost, but should only be used when you know the classes have been verified many times before. In JRuby, this reduced startup time by half or more for a simple script. The -
Xbootclasspath option can be used to either prepend (/p) or append (/a) resources to the bootstrap classpath.You Can read more about Java Classpath in my articles
How Classpath Works in Java and
How to Solve ClassNotFoundException in Java
-XX:MaxPermSize=64m Size of the Permanent Generation.
8) JVM parameters to trace classloading and unloading
-XX:+TraceClassUnloading are two JVM options which we use to print logging information whenever classes loads into JVM or unloads from JVM. These JVM flags are extremely useful if you have any memory leak related to classloader and or suspecting that classes are not unloading or garbage collected.
9) JVM switches related to logging
-XX:+TraceClassLoading and -XX:+TraceClassUnloading print information class loads and unloads. Useful for investigating if you have a class leak or if old classes (like JITed Ruby methods in JRuby) are getting collected or not.You can read more about logging in Java on my post
10 Tips while logging in Java
-XX:+PrintCompilationprints out the name of each Java method Hotspot decides to JIT compile. The list will usually show a bunch of core Java class methods initially, and then turn to methods in your application. In JRuby, it eventually starts to show Ruby methods as well
-XX:HeapDumpPath=./java_pid.hprof Path to directory or file name for heap dump.
-XX:-PrintConcurrentLocks Print java.util.concurrent locks in Ctrl-Break thread dump.
-XX:-PrintCommandLineFlags Print flags that appeared on the command line.
That’s all on JVM Options, I understand its not possible to remember all JVM flags but at-least having an idea of what kind of JVM flags are available is good asset. Image for JVM parameters is from Java tuning and Nutshell. For full list of JVM options you can refer these link from Oracle Java site:
Java Hotspot VM Options