JVM (Java Virtual Machine) tuning is crucial for optimizing performance, reducing memory usage, and improving application responsiveness. Here are some common JVM tuning options categorized based on different aspects:
1. Heap Size Configuration
These options help manage the heap memory allocation:
-Xms<size>
→ Sets the initial heap size.-Xmx<size>
→ Sets the maximum heap size.-Xmn<size>
→ Sets the size of the young generation (if applicable).-XX:NewSize=<size>
→ Specifies the initial young generation size.-XX:MaxNewSize=<size>
→ Specifies the maximum young generation size.
2. Garbage Collection (GC) Tuning
JVM provides multiple GC algorithms that impact performance:
-XX:+UseSerialGC
→ Uses the Serial Garbage Collector (best for small heaps).-XX:+UseParallelGC
→ Enables Parallel GC (good for multi-threaded applications).-XX:+UseG1GC
→ Enables G1 (Garbage First) GC (recommended for large heaps).-XX:+UseZGC
→ Enables ZGC (low-latency GC for large heaps).-XX:+UseShenandoahGC
→ Enables Shenandoah GC (low-latency GC, alternative to ZGC).-XX:MaxGCPauseMillis=<ms>
→ Sets the target maximum pause time for GC.-XX:GCTimeRatio=<n>
→ Controls GC time vs. application execution time.
3. Thread and Stack Size Optimization
-Xss<size>
→ Sets the thread stack size.-XX:ParallelGCThreads=<n>
→ Specifies the number of threads for parallel garbage collection.
4. Compilation and JIT Optimization
JVM uses the Just-In-Time (JIT) compiler to optimize performance:
-XX:+TieredCompilation
→ Enables tiered compilation for a balance between startup and peak performance.-XX:+UseStringDeduplication
→ Reduces memory usage by deduplicating string objects.-XX:+AggressiveOpts
→ Enables experimental performance optimizations.
5. Logging and Monitoring
For better observability and debugging:
-XX:+PrintGCDetails
→ Prints detailed GC logs.-XX:+PrintGCTimeStamps
→ Includes timestamps in GC logs.-Xlog:gc*
→ Unified logging for GC events in Java 9+.-XX:+HeapDumpOnOutOfMemoryError
→ Dumps heap memory when an OOM (Out of Memory) error occurs.
6. Memory Management and Performance Optimization
-XX:MetaspaceSize=<size>
→ Sets the initial metaspace size.-XX:MaxMetaspaceSize=<size>
→ Limits the maximum metaspace size.-XX:+AlwaysPreTouch
→ Pre-allocates heap memory to avoid runtime delays.
7. Container-Specific Optimization (For Docker/Kubernetes)
-XX:+UseContainerSupport
→ Enables container awareness for memory allocation.-XX:MaxRAMPercentage=<n>
→ Limits the heap size as a percentage of total available RAM.