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