RFR: 8199674: Improve G1 Full GC array marking (original) (raw)
Stefan Johansson stefan.johansson at oracle.com
Thu Mar 15 13:05:01 UTC 2018
- Previous message (by thread): RFR: JDK-8199620: Support for JNI object pinning
- Next message (by thread): RFR: 8199674: Improve G1 Full GC array marking
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi,
Please review this change to improve the Full GC marking code.
Links JBS: https://bugs.openjdk.java.net/browse/JDK-8199674 Webrev: http://cr.openjdk.java.net/~sjohanss/8199674/00/
Summary Currently when marking an object array it is split up to avoid one worker doing all the work. The code iterates over a chunk of the array and then push a task for the rest of the array to the marking stack. The problem with this is that if the iteration it self don't find any new pointers to follow, the next thing to do is to handle the next chunk in the array. This make work-stealing problematic and the performance far from optimal.
There are many schemes that can be used to improve the situation and we might want to dig into this more at some point. The fix I propose here is simple and easy but gives good improvements to the micro benchmarks I've tested it on. The fix is to push the task for the rest of the array onto the mark stack before doing the iteration of the current chunk.
Testing Functional testing through mach5 and local performance testing. Created two small JMH benchmarks that create a big object array, one fills it with object the other one is completely empty. Baseline: Benchmark Mode Cnt Score Error Units SystemGCOneBigEmpty.bench ss 25 179.740 ± 8.497 ms/op SystemGCOneBigFull.bench ss 25 5220.095 ± 192.680 ms/op
With patch applied: Benchmark Mode Cnt Score Error Units SystemGCOneBigEmpty.bench ss 25 111.854 ± 7.596 ms/op SystemGCOneBigFull.bench ss 25 1713.544 ± 36.956 ms/op
These benchmarks measure the whole time of the Full GC and not only the marking times but the improvement is still pretty clear.
Thanks, Stefan
- Previous message (by thread): RFR: JDK-8199620: Support for JNI object pinning
- Next message (by thread): RFR: 8199674: Improve G1 Full GC array marking
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]