RFR: 8256020: Don't resurrect objects on argument-dependency access
Roman Kennke
rkennke at openjdk.java.net
Tue Nov 10 20:19:53 UTC 2020
On Tue, 10 Nov 2020 20:10:03 GMT, Erik Österlund <eosterlund at openjdk.org> wrote:
> Any non-raw access load should expose only the to-space object. But that is completely orthogonal to whether it should be marked or not. And obviously, having completely different semantics for accesses depending on whether the access is performed on a Java thread or not, is not a good idea. Sounds like the barrier code needs fixing.
Why do these native-accesses be not-raw anyway?
The trouble in Shenandoah is that if an object is unreachable, and we evacuate it, then it becomes 'live' at least in the sense that it is now beyond top-at-mark-start (TAMS), e.g. implicitely-live. I believe this is what the verifier is ultimately complaining about. This is *not* a marking issue.
I have a fix that I'll push shortly after I did more testing. It does return the naked (from-space) oop when encountering AS_NO_KEEPALIVE on an unmarked object. That seems to fix this particular testcase as seems to be in the spirit of AS_NO_KEEPALIVE, assuming that AS_NO_KEEPALIVE access does not do anything nasty like storing the oop elsewhere.
-------------
PR: https://git.openjdk.java.net/jdk/pull/1113
More information about the hotspot-compiler-dev
mailing list