[lworld] RFR: 8377243: [lworld] HeapAccess<IS_DEST_UNINITIALIZED>::value_copy uses in the runtime are unsound
Axel Boldt-Christmas
aboldtch at openjdk.org
Thu Feb 5 14:40:40 UTC 2026
`IS_DEST_UNINITIALIZED ` is ment to signal to the GC that you cannot read the contents of the field as it is uninitialized. This is used by the compiler which have strict control over its safepoints.
The MemAllocator in the runtime has no such guarantees, and will clear all oop fields before handing the allocated object. These objects can have been seen by the GC and even tenured before the call `HeapAccess<IS_DEST_UNINITIALIZED>::value_copy`. This is unsound. ZGC for example could miss young to old edges if the destination object had been tenured.
I propose we remove these and always use `HeapAccess<>::value_copy`. The behaviour will be the same for value objects which do not contain oops, and correct of values which contains oops. There is the potential in the future to add something along the lines of `IS_DEST_NULL` to provide more static information to the GC to optimise the barriers on. However the gain here is probably negligible.
-------------
Commit messages:
- 8377243: [lworld] HeapAccess<IS_DEST_UNINITIALIZED>::value_copy uses in the runtime are unsound
Changes: https://git.openjdk.org/valhalla/pull/2048/files
Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=2048&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8377243
Stats: 23 lines in 5 files changed: 0 ins; 12 del; 11 mod
Patch: https://git.openjdk.org/valhalla/pull/2048.diff
Fetch: git fetch https://git.openjdk.org/valhalla.git pull/2048/head:pull/2048
PR: https://git.openjdk.org/valhalla/pull/2048
More information about the valhalla-dev
mailing list