RFR: 8292077: G1 nmethod entry barriers don't keep oops alive
Erik Österlund
eosterlund at openjdk.org
Wed Aug 10 09:11:04 UTC 2022
The intention is that when G1 uses nmethod entry barriers (currently with --enable-preview to support Loom, but soon also with https://bugs.openjdk.org/browse/JDK-8290025), it keeps nmethod oops alive the first time an nmethod becomes on-stack during concurrent marking. The current code fails to do that, even though it intended to. That should be fixed.
There was code from loom to keep the oops alive by performing a phantom load. However, there is a quirk with the access API; if you don't assign the result of the load to something, the load won't be performed, and hence the oop won't be kept alive. I changed the code to use CollectedHeap::keep_alive explicitly instead of relying on side effects of a dummy load.
I also found that we assume G1 concurrent marking isn't aborted more than once. But that can happen. I made the assumption more conservative - surely if there are INT_MAX - 1 interrupted concurrent GCs in a row... something is very very wrong.
-------------
Commit messages:
- 8292077: G1 nmethod entry barriers don't keep oops alive
Changes: https://git.openjdk.org/jdk/pull/9817/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9817&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8292077
Stats: 22 lines in 1 file changed: 16 ins; 1 del; 5 mod
Patch: https://git.openjdk.org/jdk/pull/9817.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/9817/head:pull/9817
PR: https://git.openjdk.org/jdk/pull/9817
More information about the hotspot-dev
mailing list