Java 8 GC Tutorials - Herong's Tutorial Examples - v1.03, 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> \progra~1\java\jdk1.8.0\bin\java GCPerfP99 1024 32 32 0 1000 Parameters: Size=1024KB, Base=32, Chunk=32, Warmup=0, Runs=1000 Results: Total execution time = 79 seconds Total objects processed = 32000 Average time per run = 80 milliseconds Throughput = 399 objects/second Latency = 3906 milliseconds/1000 objects Throughput (max, ave, min) = (695, 399, 256) Latency (min, ave, max) = (1438, 2506, 3906) 1% worst runs dropped: Run, Time, Throughput = 991, 125, 256 Run, Time, Throughput = 992, 125, 256 Run, Time, Throughput = 993, 126, 253 Run, Time, Throughput = 994, 127, 251 Run, Time, Throughput = 995, 129, 248 Run, Time, Throughput = 996, 130, 246 Run, Time, Throughput = 997, 156, 205 Run, Time, Throughput = 998, 184, 173 Run, Time, Throughput = 999, 203, 157 Run, Time, Throughput = 1000, 215, 148 Press ENTER to end...
The output looks very good:
Run it again with highest priority and without touch the computer while it is running.
herong> start /realtime \progra~1\java\jdk1.8.0\bin\java \ GCPerfP99 1024 32 32 0 1000 Parameters: Size=1024KB, Base=32, Chunk=32, Warmup=0, Runs=1000 Results: Total execution time = 77 seconds Total objects processed = 32000 Average time per run = 78 milliseconds Throughput = 406 objects/second Latency = 3448 milliseconds/1000 objects Throughput (max, ave, min) = (695, 406, 290) Latency (min, ave, max) = (1438, 2463, 3448) 1% worst runs dropped: Run, Time, Throughput = 991, 110, 290 Run, Time, Throughput = 992, 110, 290 Run, Time, Throughput = 993, 110, 290 Run, Time, Throughput = 994, 110, 290 Run, Time, Throughput = 995, 110, 290 Run, Time, Throughput = 996, 110, 290 Run, Time, Throughput = 997, 110, 290 Run, Time, Throughput = 998, 110, 290 Run, Time, Throughput = 999, 125, 256 Run, Time, Throughput = 1000, 141, 226 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"
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 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
Performance Tests on Serial Collector
Performance Tests on Parallel collector
Performance Tests on Concurrent collector
Performance Tests on G1 collector