On Mon, 28 Sep 2020 15:22:55 GMT, Roman Kennke <rken...@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