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

 About This Book

 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

 Garbage Collection Performance Test Summary

 References

 Full Version in PDF/EPUB