RFR: 8363996: Obsolete UseCompressedClassPointers [v5]
Thomas Stuefe
stuefe at openjdk.org
Mon Feb 9 21:37:00 UTC 2026
On Mon, 8 Dec 2025 05:01:15 GMT, David Holmes <dholmes at openjdk.org> wrote:
>> Thomas Stuefe has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 62 commits:
>>
>> - Replace Klass::_metadata union with narrowKlass member
>> - Ivan: fix various instances of ObjLayout::undefined should assert
>> - Ivan: Update src/hotspot/share/oops/instanceKlass.cpp
>>
>> Co-authored-by: Ivan Walulya <ivan.walulya at oracle.com>
>> - David: reduce diff in ObjectCountEventVerifier.java
>> - David: minimize change in GetObjectSizeIntrinsicsTest.java
>> - David: minimize diffs in TestZGCWithCDS.java
>> - David: minimize diffs for runtime/ErrorHandling/TestVMConfigInHsErrFile.java
>> - David: revert type change in arguments.cpp
>> - David: fix comment in metaspace
>> - Merge branch 'master' into JDK-8363996-Obsolete-UseCompressedClassPointers
>> - ... and 52 more: https://git.openjdk.org/jdk/compare/ffb6279c...642604ac
>
> test/hotspot/jtreg/runtime/CompressedOops/CompressedClassPointers.java line 294:
>
>> 292: }
>> 293:
>> 294: public static void heapBaseMinAddressTestNoCoop() throws Exception {
>
> It is not obvious to me why this test case was deleted.
Related to the change here: https://github.com/openjdk/jdk/pull/28366/changes#diff-027490ce3f4a92be9b489d9d2e54c7baaea87b7489399b198543c79f1ce1e2e3L1576
This test only worked by accident, and never made sense.
`HeapBaseMinAddress`: in `+UseCompressedOops` mode, it forces the heap to this address (arguably, the name is a misnomer); failing that, it will treat it as a low barrier in further reservation attempts. But not always: if we cannot get any preferred address, we will use whatever address the OS gives us, which may be lower than a high value for `HeapBaseMinAddress`. (Writing this now, I think that should be a bug).
In `-UseCompressedClassPointers` mode, the flag does nothing. The test always worked because the value of 1M is so low that no OS will accidentally map into that area.
---
Note that it's a different question of whether we *should* honor the flag for `-UseCompressedOops +UseCompressedClassPointers`. Could a barrier like that be useful to keep the heap away from low-address regions to increase the chance for a low-address class space? But looking closely, probably not worth it for two reasons: on all 64-bit platforms, the chance of "OS-determined" mappings to hit the low address regions < 32GB is so rare its not worth the complexity. And low-address heap is more useful performance-wise than low-address class space anyway.
> test/hotspot/jtreg/runtime/ErrorHandling/TestVMConfigInHsErrFile.java line 59:
>
>> 57: switch (args[0]) {
>> 58: case "coh-on" -> testCompactObjectHeaders();
>> 59: case "coh-off" -> testCompressedClassPointers();
>
> You seem to have done a complete test rewrite here and it is not obvious to me it follows as part of the obsoletion of UCCP.
Okay, I reverted most of my changes and kept the diff minimal. The test could be cut down a lot more, though.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/28366#discussion_r2781257967
PR Review Comment: https://git.openjdk.org/jdk/pull/28366#discussion_r2781772213
More information about the core-libs-dev
mailing list