On Mon, 28 Sep 2020 15:22:55 GMT, Roman Kennke <[email protected]> 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