RFR: 8253180: ZGC: Implementation of JEP 376: ZGC: Concurrent Thread-Stack Processing [v7]
Erik Österlund
eosterlund at openjdk.java.net
Mon Sep 28 16:44:16 UTC 2020
On Mon, 28 Sep 2020 15:22:55 GMT, Roman Kennke <rkennke at openjdk.org> wrote:
>> Erik Österlund has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Review: Albert CR2 and defensive programming
>
> src/hotspot/share/compiler/oopMap.cpp line 319:
>
>> 317: #ifdef ASSERT
>> 318: if ((((uintptr_t)loc & (sizeof(oop)-1)) != 0) ||
>> 319: !Universe::heap()->is_in_or_null((oop)NativeAccess<AS_NO_KEEPALIVE>::oop_load(&val))) {
>
> This NativeAccess call causes the troubles with Shenandoah GC. It triggers evacuation of the object referenced by the
> stack location during a safepoint, which we'd rather avoid. Why is it needed?
We call frame::oops_do from the GC to make bad oops good. But the oops_do logic assers the oop is good *before* the
closure is applied. Every time I do something, I run i to issues with this assert. It seems like an invalid assumption
to me, that oops are meant to always be good, even before they are fixed. I vote for removing this assert. It has
caused a lot of pain. Any takers?
-------------
PR: https://git.openjdk.java.net/jdk/pull/296
More information about the serviceability-dev
mailing list