JVM flags
📅 29 Dec 2018 🕑 4 min readRecently, I needed to decrease the time of stop-the-world pause that happened while Garbage Collector worked. During working on the problem, I found out many interesting jvm flags. In order to keep the information in one place, I created the following table.
type | category | name | description |
memory | common | -Xms<size>[k|m|G] |
the initial heap size |
-Xmx<size>[k|m|G] |
maximum heap size | ||
-Xss<size>[k|m|G] |
execution stack size | ||
-XX:NewRatio=<N> |
the ratio between old generation (tenured) and new generation | ||
-XX:MinHeapFreeRatio=<N> |
minimum ratio between free space to decrease size of generation | ||
-XX:MaxHeapFreeRatio=<N> |
minimum ratio between free space to increase size of generation | ||
new generation | -Xmn<size>[k|m|G] |
size of new generation memory | |
-XX:NewSize=<size>[k|m|G] |
minimum size of young generation memory | ||
-XX:MaxNewSize=<size>[k|m|G] |
maximum size of young generation memory | ||
-XX:SurvivorRatio=<N> |
$$ ratio = \frac{\text{eden}}{\text{survivor} * 2} $$ | ||
-XX:YoungGenerationSizeIncrement=<N> |
percent of increasing young generation | ||
old generation | -XX:TenuredGenerationSizeIncrement=<N> |
percent of increasing old generation | |
metaspace | -XX:MaxMetaspaceSize=<size>[k|m|G] |
size of metaspace | |
-XX:+CMSClassUnloadingEnabled |
unload unused classes from the memory | ||
garbage collection | common | -XX:+ScavengeBeforeFullGC |
perform GC for young generation area before Full GC |
-XX:+CMSScavengeBeforeRemark |
perform GC for young generation area before remark> stage | ||
-XX:-DisableExplicitGC |
disable System.gc() |
||
-XX:CMSInitiatingOccupancyFraction=<N> |
load factor of Tenured> area to run GC | ||
-XX:InitiatingHeapOccupancyPercent=<N> |
load factor of heap area to run mark stage | ||
-XX:GCHeapFreeLimit=<N> |
free memory limit after full GC. In case if size of free memory is less, OutOfMemoryError occurs | ||
-XX:-UseGCOverheadFreeLimit |
activity limit of GC. In case if GC takes more time, OutOfMemoryError occurs | ||
-XX:GCTimeLimit=<N> |
time limit for GC. If GC time exceeds this limit, OutOfMemoryError occurs. This ratio is between summary time of execution app and GC time | ||
Serial GC | -XX:+UseSerialGC |
enable Serial GC | |
Parallel GC | -XX:+UseParallelGC |
enable Parallel GC | |
-XX:MaxGCPauseMillis=<N> |
maximum time interval between GC | ||
-XX:GCTimeRatio=<N> |
the ratio between GC time and time of execution application. $$ \text{GC} = \frac{1}{1+\text{N}} $$ | ||
Concurrent Mark and Swap | -XX:+UseConcMarkSweepGC |
enable Concurrent Mark and Swap GC | |
-XX:+UseParNewGC |
use parallelism during GC on new generation area | ||
-XX:ParallelGCThreads=<N> |
count of threads for parallel GC execution | ||
-XX:ConcGCThreads=<N> |
total count of threads for GC | ||
-XX:+CMSScavengeBeforeRemark |
run remark stage after GC execution on new generation area | ||
-XX:CMSWaitDuration |
run GC on tenured are after GC execution on new generation | ||
Garbage First | -XX:+UseG1GC |
enable G1 | |
-XX:MaxGCPauseMillis=<N> |
Maximum interval between GC pauses | ||
-XX:GCPauseIntervalMillis=<N> |
Maximum interval between G1 executions | ||
-XX:G1HeapRegionSize=<size>[k|m|G] |
heap memory size | ||
-XX:ParallelGCThreads=<N> |
count of threads for parallel GC execution | ||
-XX:ConcGCThreads=<N> |
total count of threads for GC | ||
GC logging | -verbose:gc |
enable printing GC information | |
-Xlog:gc |
enable garbage collector logs | ||
-Xlog:gc* |
enable garbage collector detailed logs | ||
-Xloggc:<filename> |
save logs into a file | ||
-XX:+UseGCLogFileRotation> |
enable log rotation | ||
-XX:+HeapDumpBeforeFullGC |
create memory before full GC stage | ||
-XX:NumberOfGCLogFiles=<N> |
count of log files | ||
-XX:+PrintGCDetails |
print more details about GC | ||
-XX:+PrintGCDateStamps |
add time to logs | ||
-XX:+PrintGCApplicationConcurrentTime |
time that taken by GC in case when all treads of application were working | ||
-XX:+PrintGCApplicationStoppedTime |
stop the world time | ||
other | -XX:+PrintFlagsFinal |
print passed jvm flags | |
-XX:+HeapDumpOnOutOfMemoryError |
make dump before unexpected termination due to OutOfMemoryError | ||
-XX:HeapDumpPath=dump.hprof |
make dump before unexpected termination due to OutOfMemoryError | ||
-XX:+CompileThreshold=<N> |
count of executions that have been done until JIT optimizations are applied | ||
-XX:+UseCompressedOops |
compact references in order to decrease memory usage | ||
-XX:+OptimizeStringConcat |
use StringBuilder instead of + operator |
||
-XX:+PrintCompilation |
show optimization levels of JIT | ||
-XX:+AggressiveOpts |
aggressive optimization level | ||
-XX:+UseStringCache |
cache strings | ||
jmap tool | run | jmap <pid> |
get information about memory usage |
flags | -heap |
information about a whole heap | |
-histo |
information about memory usage in terms of each classes | ||
-histo:live |
information about live objects | ||
-dump:live,format=b,file=heap.hprof |
save dump into a file |
\(\text{heap} = \text{young generation} + \text{old generation}\)
\(\text{young generation} = \text{eden} + \text{survivor} * 2\)
\(\text{survivor ratio} = \frac{ \text{eden}}{\text{survivor} * 2}\)