RFR: Generational support for weak roots and references [v2]

Roman Kennke rkennke at openjdk.java.net
Fri Aug 6 14:51:09 UTC 2021


On Tue, 3 Aug 2021 16:48:33 GMT, William Kemper <wkemper at openjdk.org> wrote:

>> ### Summary
>> The LRB for non-strong references is modified to permit resurrection of objects outside the generation being collected. In other words, resurrection is only blocked for unmarked objects in the generation being collected.
>> 
>> Each `ShenandoahGeneration` has its own reference processor instance. In some cases, a reference from the old generation may end up on the young generation discovered list if the reference points to a young referent (this would happen if the old reference is in the remembered set). However, young references that point to referents in the old generation are _not_ discovered. This has the effect of strongly marking the old generation referent. This also avoids the case of having young references on the old generation discovered list being evacuated/relocated while they wait for old generation reference processing (although we believe this case would be handled correctly by the existing update references code).
>
> William Kemper has updated the pull request incrementally with four additional commits since the last revision:
> 
>  - Prepare for concurrent root processing in old generation final mark
>  - Clear cards and object registrations when region is recycled
>    
>    This fixes an error when humongous regions are allocated and when ensures registrations are correct when regions are promoted.
>  - Check that pointer is in heap before looking up affiliation
>  - Guard assert from cross-generation handle

Looks good. I only have a few remarks/questions.

src/hotspot/share/gc/shenandoah/mode/shenandoahGenerationalMode.hpp line 29:

> 27: 
> 28: #include "gc/shenandoah/mode/shenandoahMode.hpp"
> 29: #include "oops/oop.hpp"

I believe the proper way to get 'oop' into scope is to include oopsHierarchy.hpp

src/hotspot/share/gc/shenandoah/shenandoahOldGC.cpp line 139:

> 137: 
> 138:   // Concurrent stack processing
> 139:   if (heap->is_evacuation_in_progress()) {

Where has this gone?

-------------

PR: https://git.openjdk.java.net/shenandoah/pull/53


More information about the shenandoah-dev mailing list