Java GC Tutorials - Herong's Tutorial Examples - v1.11, by Dr. Herong Yang
GCPerfP99.java - Output Verification
This section provides tutorials to verify output from GCPerfP99.java test runs. System interrupts are successfully excluded from performance calculation.
The first test of our GCPerfP99.java is to see how it reacts to system interruptions.
Start the JVM to run the application, wait for few seconds, then start Chrome on your computer while the JVM is running.
herong> java GCPerfP99.java 1024 32 32 0 1000 Parameters: Size=1024KB, Base=32, Chunk=32, Warmup=0, Runs=1000 ... Results: Total execution time = 12 seconds Total objects processed = 32000 Average time per run = 12 milliseconds Throughput = 2549 objects/second Latency = 843 milliseconds/1000 objects Throughput (max, ave, min) = (4000, 2549, 1185) Latency (min, ave, max) = (250, 392, 843) 1% worst runs dropped: Run, Time, Throughput = 991, 27, 1185 Run, Time, Throughput = 992, 28, 1142 Run, Time, Throughput = 993, 28, 1142 Run, Time, Throughput = 994, 28, 1142 Run, Time, Throughput = 995, 29, 1103 Run, Time, Throughput = 996, 32, 1000 Run, Time, Throughput = 997, 33, 969 Run, Time, Throughput = 998, 35, 914 Run, Time, Throughput = 999, 36, 888 Run, Time, Throughput = 1000, 39, 820 Press ENTER to end...
The output looks very good:
Run it again with highest priority and without touch the computer while it is running.
C:\herong>start /realtime java GCPerfP99 1024 32 32 0 1000 Parameters: Size=1024KB, Base=32, Chunk=32, Warmup=0, Runs=1000 Results: Total execution time = 10 seconds Total objects processed = 32000 Average time per run = 10 milliseconds Throughput = 2963 objects/second Latency = 468 milliseconds/1000 objects Throughput (max, ave, min) = (4571, 2963, 2133) Latency (min, ave, max) = (218, 337, 468) 1% worst runs dropped: Run, Time, Throughput = 991, 15, 2133 Run, Time, Throughput = 992, 16, 2000 Run, Time, Throughput = 993, 16, 2000 Run, Time, Throughput = 994, 16, 2000 Run, Time, Throughput = 995, 17, 1882 Run, Time, Throughput = 996, 17, 1882 Run, Time, Throughput = 997, 18, 1777 Run, Time, Throughput = 998, 18, 1777 Run, Time, Throughput = 999, 20, 1600 Run, Time, Throughput = 1000, 29, 1103 Press ENTER to end...
The output matched my expectation. There were two small system interruptions by looking at the dropped runs, because it was executed with the highest priority on a quiet system.
Table of Contents
Heap Memory Area and Size Control
JVM Garbage Collection Logging
Introduction of Garbage Collectors
Serial Collector - "+XX:+UseSerialGC"
Parallel Collector - "+XX:+UseParallelGC"
Concurrent Mark-Sweep (CMS) Collector - "+XX:+UseConcMarkSweepGC"
Garbage First (G1) Collector - "+XX:+UseG1GC"
The Z Garbage Collector (ZGC) - "+XX:+UseZGC"
Object References and Garbage Collection
►Garbage Collection Performance Test Program
GCPerformance.java - GC Performance Test Program
GCPerformance.java - Program Output
Performance Impact of Wait Time
Performance Impact of Object Size
Performance Impact of Chunk Size
Performance Jumps Not Related to GC
Performance Test and System Interruptions
"START /REALTIME" - Run JVM with Highest Priority
GCPerfP99.java - 99th Percentile Performance
►GCPerfP99.java - Output Verification
GCPerfP99V2.java - Percentile Performance with Load
GCPerfP99V2.java - Work Load Level
GCPerfP99V2.java - Object Number and Size
Performance Tests on Serial Collector
Performance Tests on Parallel collector
Performance Tests on Concurrent collector
Performance Tests on G1 collector