RFR: Concurrent partial should not trash cset on cancellation path
Roman Kennke
rkennke at redhat.com
Fri Oct 13 10:24:07 UTC 2017
Am 13.10.2017 um 12:06 schrieb Aleksey Shipilev:
> 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
>
Ok good! Thanks!
More information about the shenandoah-dev
mailing list