RFR (XS): Avoid double-touching for array headers during mark

Aleksey Shipilev shade at redhat.com
Wed Jan 11 16:19:20 UTC 2017


Hi,

There is a tiny micro-optimization in our marking code. We don't need to touch
the array header before submitting the chunked array processing. G1 already does
this trick [1], don't see why we should not do the same:
  http://cr.openjdk.java.net/~shade/shenandoah/arrays-double-header/webrev.01/

Testing: hotspot_gc_shenandoah

If you create the large tree with Node[2] {left, right} arrays in each node,
then the marking times are significantly improved:

Before:
 Concurrent Marking Times =   23.55 s (avg =  1121586 us)
    (num =    21, lvls (10% step, us) =
      1015625, 1132812, 1132812, 1132812, 1152344,
      1152344, 1171875, 1171875, 1171875, max =  1231954)

After:
 Concurrent Marking Times  =  22.10 s (avg =  1004685 us)
    (num =    22, lvls (10% step, us) =
       917969,  996094, 996094,  1015625, 1015625,
      1015625, 1035156, 1035156, 1035156, max =  1096716)

(This, BTW, tells a bad story about re-touching klasses for objects in heap,
which may be another source of improvements)

Thanks,
-Aleksey

[1]
http://hg.openjdk.java.net/jdk9/dev/hotspot/file/31f1d26c60df/src/share/vm/gc/g1/g1ParScanThreadState.inline.hpp#l104



More information about the shenandoah-dev mailing list