RFR: Concurrent partial should not trash cset on cancellation path
Aleksey Shipilev
shade at redhat.com
Fri Oct 13 10:06:10 UTC 2017
TestGCOldWithShenandoah fails after final-partial cancellation with:
# Error: Shenandoah verification failed; Before Full GC, Reachable: Object should be in active region
Referenced from:
interior location: 0x00000000f6287d9c
0x00000000f6287d88 - klass 0x00000001000614e0 TreeNode
allocated after complete mark start
allocated after next mark start
marked complete
marked next
not in collection set
region: |0x00002b268408ad50| 906|R |BTE 0x00000000f6280000, 0x00000000f62c0000, ...
Object:
0x00000000fa04e828 - klass 0x00000001000614e0 TreeNode
not allocated after complete mark start
not allocated after next mark start
not marked complete
not marked next
not in collection set
region: |0x00002b268409b3c0| 1153|T |BTE 0x00000000fa040000, 0x00000000fa080000, ...
This happens because current code manages to trash the cset regions on cancellation path, which
makes Full GC very unhappy: these trash regions may be zapped eagerly, making GC code crash -- we
have seen this happening before ShenandoahVerify configs were moved to be the first run
configuration in GCOld.
The solution is to rewire final_partial_collection() to exit without touching the cset:
http://cr.openjdk.java.net/~shade/shenandoah/concpartial-cset-trash-cancel/webrev.01/
Testing: hotspot_gc_shenandoah (+ failing test)
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list