RFR: Enable string deduplication in all marking phases
Aleksey Shipilev
shade at redhat.com
Tue Oct 2 16:07:03 UTC 2018
On 10/02/2018 05:51 PM, Zhengyu Gu wrote:
> Aleksey found that Shenandoah is inconsistent on honoring string deduplication flag.
>
> Shenandoah string deduplication was initially designed for concurrent marking phases only. Over the
> courses, it diverged. e.g. Traversal GC also performs deduplication in init and final pauses.
>
> So, let's make it consistent:
>
> Webrev: http://cr.openjdk.java.net/~zgu/shenandoah/dedup_all_phases/webrev.00/
Good stuff.
*) code_blobs became unused, and instead we are always going via MarkingCodeBlobClosure on product
path? That's very unfortunate. Can we maybe pass the ShenandoahInitMarkRootsClosure into the
do_work, and leave the rest of the code intact? Or even specialize ShenandoahInitMarkRootsTask with
STRING_DEDUP?
*) If thing above is not an issue, let's clean up this block a bit:
- L105 needs the space after comma.
- "cldCl" and "blobsCl" need to be "cld_cl" and "blobs_cl", respectively
104 if (ShenandoahStringDedup::is_enabled()) {
105 ShenandoahInitMarkRootsClosure<UPDATE_REFS,ENQUEUE_DEDUP> mark_cl(q);
106 CLDToOopClosure cldCl(&mark_cl);
107 MarkingCodeBlobClosure blobsCl(&mark_cl, ! CodeBlobToOopClosure::FixRelocations);
108 do_work(heap, &mark_cl, _process_refs ? NULL : &mark_cl, &cldCl, &blobsCl, worker_id);
109 } else {
110 ShenandoahInitMarkRootsClosure<UPDATE_REFS, NO_DEDUP> mark_cl(q);
111 CLDToOopClosure cldCl(&mark_cl);
112 MarkingCodeBlobClosure blobsCl(&mark_cl, ! CodeBlobToOopClosure::FixRelocations);
113 do_work(heap, &mark_cl, _process_refs ? NULL : &mark_cl, &cldCl, &blobsCl, worker_id);
114 }
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list