RFR: Strong roots scan should include thread stack oops

Aleksey Shipilev shade at redhat.com
Thu Jul 6 09:42:19 UTC 2017


We call into RP::process_strong_roots during init mark here:

    if (heap->concurrentMark()->unload_classes()) {
      _rp->process_strong_roots(&mark_cl, _process_refs ? NULL : &mark_cl,
                                &cldCl, &blobsCl, worker_id);

...with the rationale:

 a. With unload_classes = true, we only want to scan the actual strong roots
    from the code cache. This will allow us to identify the dead classes,
    unload them, *and* invalidate the relevant code cache blobs. This could
    be only done together with class unloading.

However, inside process_strong_roots definition, we ignore CodeBlobClosure!
Instead, we should pass it down to process_java_roots, which will pass it to
stack code oop scans, which are by definition, strong. Makes sense?

Fix:
  http://cr.openjdk.java.net/~shade/shenandoah/rs-strong-coderoots/webrev.01/

Testing: hotspot_gc_shenandoah

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list