RFR: Fold Partial GC into Traversal GC

Aleksey Shipilev shade at redhat.com
Thu Apr 26 08:41:50 UTC 2018


On 04/25/2018 11:08 PM, Roman Kennke wrote:
>> *) Is the move of ShenandoahHeapRegionSetIterator::ShenandoahHeapRegionSetIterator from .inline.hpp
>> to .cpp sensible? This desyncs backports...
> 
> Want me to extract this, and push separately? It did not build on 'my'
> aarch64 box, due to missing inline (tried to compile one definition per
> call-site, clashed in linking).

Yes, please push this under the separate changeset, so it can go to backports.

> Differential:
> http://cr.openjdk.java.net/~rkennke/partial-traversal/webrev.04.diff/
> Full:
> http://cr.openjdk.java.net/~rkennke/partial-traversal/webrev.04/
> 
> Good now?

Looks good.

I have another question, in ShenandoahTraversalGC::process_oop:

  43     // We need to check is_in_reserved() because this may be called by Metadata traversal.
  44     bool update_matrix = _heap->is_in_reserved(p);
  ...
  67     if (UPDATE_MATRIX && update_matrix) {
  68       // Successful update of reference. Also update matrix.
  69       shenandoah_assert_not_forwarded_except(p, obj, _heap->cancelled_concgc());
  70       _matrix->set_connected(p, obj);
  71     }

How's that is_in_reserved correct? It will try to connect the off-heap root to in-heap oop, and then
we do the store somewhere off the matrix. I guess that never happens during normal cycle, because
roots would not contain forwarded objects, but it is plausible on DEGEN path? Should be is_in()?

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list