> _This patch is not intended for JDK 26_. > > I'm posting it now to collect feedback and, barring any objections, plan to > push it once JDK 27 opens. > > This change removes the uncompressed Klass pointer mode and, with compressed > Klass pointers remaining as the only option, the `UseCompressedClassPointers` > switch. > > For motivation, please take a look at CSR associated with the deprecation > (which we did for JDK 25) and the preparatory discussion we had at the start > of the year around this topic [2]. > > This patch is quite invasive and touches many parts of the JVM, since its > goal is to remove most traces of the uncompressed Klass path and to take > advantage of opportunities for simplification. In some cases, I did not take > opportunities for further simplification to keep the patch somewhat legible; > it will be onerous enough to review. > > ### Implementation Notes > > With uncompressed Klass pointers removed, we have three modes of operation > left (including 32-bit): > a) 64-bit, COH off - this is the old `+UseCompressedClassPointers` mode. > This is now the standard mode until we run with COH by default. > b) 64-bit, COH on > c) 32-bit - Here, we run with a "fake" narrow Klass pointer mode. We run > with hardcoded narrowKlass base == NULL and shift = 0, so nKlass == Klass*. > The difference to (a, b) is that we don't use a class space. This was > implemented with JDK-8363998 [3] - for more details, please see that issue > and its PR. > > I ensured *arm32* builds and I performed some rudimentary checks (selected > metaspace/gc tests, and a simple Spring PetClinic run). Vendors with an > interest in arm32 will have to step up and do their own, more thorough unit > testing. Also, I did not see anyone doing follow-up work after JDK-8363998 > [3] - so some issues may still lurk from that patch as well (but maybe > JDK-8363998 was just not breaking anything). > > I did not check *zero 32-bit*, the only other platform supporting 32-bit. > Anyone with an interest in 32-bit zero should chip in. > > Pre-existing errors: While working on this patch, I stumbled over a few > occurrences of old but benign bugs. Mostly old code assuming > CompressedClassPointers and CompressedOops were still tied together (example: > Arguments::set_heap_size()). These bugs are implicitly fixed with this patch. > > ### Testing > > - tier 1 2 3 locally on Linux x64 > - SAP ran their whole set of tests for all the platforms they support. > > > [1] https://bugs.openjdk.org/browse/JDK-8350754 > [2] https://mail.openjdk.org/pipermail/hotspot-dev/2025-February...
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 <[email protected]> - 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 ------------- Changes: https://git.openjdk.org/jdk/pull/28366/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28366&range=04 Stats: 1702 lines in 141 files changed: 61 ins; 1187 del; 454 mod Patch: https://git.openjdk.org/jdk/pull/28366.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/28366/head:pull/28366 PR: https://git.openjdk.org/jdk/pull/28366
