RFR: Traversal: Don't traverse new objects

Aleksey Shipilev shade at redhat.com
Wed Feb 21 15:19:22 UTC 2018


On 02/21/2018 12:24 PM, Roman Kennke wrote:
> On Tue, Feb 20, 2018 at 12:22 PM, Aleksey Shipilev <shade at redhat.com> wrote:
>> On 02/19/2018 06:48 PM, Roman Kennke wrote:
>>> Full-patch:
>>> http://cr.openjdk.java.net/~rkennke/traversal-no-traverse-new/webrev.01/

> - While we want new objects to be implicitely marked, we don't want to
> count them alive. Otherwise the next cycle wouldn't pick them up and
> consider them for cset. This means that we need to protect such
> regions from getting accidentally thrashed at the end of traversal
> cycle. This is why I keep track of alloc-regions and check
> is_alloc_region() in the trashing code.
> - We *need* to traverse through evacuated objects. Those objects are
> pre-existing, and any references in them point to interesting objects
> that we need to see. We also want to count them as live, because we
> just determined that they are alive :-) I achieve this by upping TAMS
> concurrently for every gclab/gc-shared alloc before publishing the
> evacuated object. This way, the GC threads will not consider such
> objects implictely marked, and traverse through them as normal.

This should be in the code comment.

> This change both improves throughput and pause time considerably.
> 
> Does the explanation make things clearer?

Yes.


-Aleksey



More information about the shenandoah-dev mailing list