| Analysis Date | JDK | Operating System | CPU Architecture | Debug JVM? |
|---|---|---|---|---|
| 2025-12-16 | OpenJDK21 | Linux | x86 | N |
Results
Switches Identified
Switch Analysis
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| UnlockExperimentalVMOptions | boolean | Enable normal processing of flags relating to experimental features |
false | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ms | <size> | set initial Java heap size | 2g | |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| mx | <size> | set maximum Java heap size | 2g | |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| MetaspaceSize | size_t | Initial threshold (in bytes) at which a garbage collection is done to reduce Metaspace usage |
NOT_LP64(16 * M) LP64_ONLY(21 * M) | 128m |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| MaxMetaspaceSize | size_t | Maximum size of Metaspaces (in bytes) | max_uintx | 512m |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| CompressedClassSpaceSize | size_t | Maximum size of class area in Metaspace when compressed class pointers are used |
1*G in range(1*M, 3*G) | 128m |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| MaxDirectMemorySize | uint64_t | Maximum total size of NIO direct-buffer allocations. Ignored if not explicitly set. |
0 in range(0, max_jlong) | 768m |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| UseShenandoahGC | boolean | Use the Shenandoah garbage collector | false | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ShenandoahGCMode | string | GC mode to use. Among other things, this defines which barriers are in in use. Possible values are: satb - snapshot-at-the-beginning concurrent GC (three pass mark-evac-update); iu - incremental-update concurrent GC (three pass mark-evac-update); passive - stop the world GC only (either degenerated or full) |
satb | iu |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ShenandoahGCHeuristics | string | GC heuristics to use. This fine-tunes the GC mode selected, by choosing when to start the GC, how much to process on each cycle, and what other features to automatically enable. Possible values are: adaptive - adapt to maintain the given amount of free heap at all times, even during the GC cycle; static - trigger GC when free heap falls below the threshold; aggressive - run GC continuously, try to evacuate everything; compact - run GC more frequently and with deeper targets to free up more memory. |
adaptive | compact |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ShenandoahInitFreeThreshold | int | How much heap should be free before some heuristics trigger the initial (learning) cycles. Affects cycle frequency on startup and after drastic state changes, e.g. after degenerated/full GC cycles. In percents of (soft) max heap size. |
70 in range(0,100) | 70 |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ShenandoahMinFreeThreshold | int | How much heap should be free before most heuristics trigger the collection, even without other triggers. Provides the safety margin for many heuristics. In percents of (soft) max heap size. |
10 in range(0,100) | 5 |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ShenandoahUncommit | boolean | Allow to uncommit memory under unused regions and metadata. This optimizes footprint at expense of allocation latency in regions that require committing back. Uncommits would be disabled by some heuristics, or with static heap size. |
true | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ShenandoahUncommitDelay | int | Uncommit memory for regions that were not used for more than this time. First use after that would incur allocation stalls. Actively used regions would never be uncommitted, because they do not become unused longer than this delay. Time is in milliseconds. Setting this delay to 0 effectively uncommits regions almost immediately after they become unused. |
5*60*1000 | 5000 |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ShrinkHeapInSteps | boolean | When disabled, informs the GC to shrink the java heap directly to the target size at the next full GC rather than requiring smaller steps during multiple full GCs. |
true | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| MinHeapFreeRatio | int | The minimum percentage of heap free after GC to avoid expansion. For most GCs this applies to the old generation. In G1 and ParallelGC it applies to the whole heap. |
40 in range(0, 100) | 10 |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| MaxHeapFreeRatio | int | The maximum percentage of heap free after GC to avoid shrinking. For most GCs this applies to the old generation. In G1 and ParallelGC it applies to the whole heap. |
70 in range(0, 100) | 30 |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| GCTimeRatio | int | Adaptive size policy application time to GC time ratio | 99 in range(0, max_juint) | 99 |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| UseStringDeduplication | boolean | Use string deduplication | false | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| StringTableSize | int | Number of buckets in the interned String table (will be rounded to nearest higher power of 2) |
defaultStringTableSize in range(minimumStringTableSize, 16777216ul /* 2^24 */) | 65536 |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| UseCompressedOops | boolean | Use 32-bit object references in 64-bit VM. lp64_product means flag is always constant in 32 bit VM |
false | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| UseCompressedClassPointers | boolean | Use 32-bit class pointers in 64-bit VM. lp64_product means flag is always constant in 32 bit VM |
true | true |
| Analysis | This switch will be removed in the future. It will be Deprecated in OpenJDK25. Obsoleted in OpenJDK27. | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| DoEscapeAnalysis | boolean | Perform escape analysis | true | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| EliminateAllocations | boolean | Use escape analysis to eliminate allocations | true | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| EliminateLocks | boolean | Coarsen locks when possible | true | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| OptimizeStringConcat | boolean | Optimize the construction of Strings by StringBuilder | true | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value | ||||
|---|---|---|---|---|---|---|---|---|
| TieredCompilation | boolean | Enable tiered compilation |
|
true | ||||
| Analysis | OK | |||||||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| TieredStopAtLevel | int | Stop at given compilation level | 4 in range(0, 4) | 4 |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value | ||||
|---|---|---|---|---|---|---|---|---|
| CompileThreshold | int | number of interpreted method invocations before (re-)compiling |
|
2000 | ||||
| Analysis | OK | |||||||
| Name | Type | Description | Default Value | Your Value | ||||
|---|---|---|---|---|---|---|---|---|
| OnStackReplacePercentage | int |
|
140 | |||||
| Analysis | OK | |||||||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| FreqInlineSize | int | The maximum bytecode size of a frequent method to be inlined | 325 | 300 |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| MaxInlineSize | int | The maximum bytecode size of a method to be inlined by high tier compiler |
35 in range(0, max_jint) | 35 |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ParallelRefProcEnabled | boolean | Enable parallel reference processing whenever possible | false | true |
| Analysis | This switch will be removed in the future. It will be Deprecated in OpenJDK26. Obsoleted in OpenJDK27. Expired in OpenJDK28. | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| AlwaysPreTouch | boolean | Force all freshly committed pages to be pre-touched | false | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ClassUnloading | boolean | Do unloading of classes | true | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| ClassUnloadingWithConcurrentMark | boolean | Do unloading of classes with a concurrent marking cycle | true | true |
| Analysis | OK | |||
| Name | Type | Description | Default Value | Your Value |
|---|---|---|---|---|
| MetaspaceReclaimPolicy | string | options: balanced, aggressive, none | balanced | balanced |
| Analysis | This switch was removed after OpenJDK20. Your analysis was for OpenJDK21 | |||
