On Wed, 17 Dec 2025 11:34:46 GMT, Mikhail Ablakatov <[email protected]> 
wrote:

> nmethod objects in the CodeCache have the following layout:
> 
> 
> | CodeBlob header | NMethod header | Constants | MainCode | StubCode | 
> Data/oops |
> 
> 
> Although mutable and immutable metadata have already been moved out of the 
> code cache by JDK-8343789 and JDK-8331087 respectively, the embedded 
> `nmethod` header fields still occupy ~160 B (with the `CodeBlob` header 
> adding another 64 B). In JDK25 the total header footprint is 224 B. This 
> space is reserved inside executable memory, which decreases overall 
> executable code density.
> 
> This patch relocates the `nmethod` header to a C-heap-allocated structure and 
> keeps only 8-byte pointer to that header in the CodeCache. The resulting 
> layout is:
> 
> 
> | CodeBlob header | Ptr to NMethodHeader | Constants | MainCode | StubCode | 
> Data/oops |
> 
> 
> This change reduces the size of the CodeCache-resident header from 224 B to 
> 72 B (64 B `CodeBlob` header + 8 B pointer), achieving roughly a **3x 
> reduction** in header footprint.
> 
> This change follows the direction established by JDK-7072317, JDK-8331087 and 
> JDK-8343789.
> 
> ## Testing
> 
> The patch has passed `tier1-3` and `hotspot_all` tests on AArch64 and x86_64.

The SA changes look ok, but you'll need to do some testing by hand. The 
existing SA tests don't do a good job of testing compiler support. 
Specifically,  you should run the clhsdb "livenmethods" and "dumpcodecache" 
commands and make sure the output looks reasonable. Note you may see an issue 
with "dumpcodecache" getting stuck after producing some output. You can ignore 
that. I just filed [JDK-8373933](https://bugs.openjdk.org/browse/JDK-8373933) 
for it.

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java line 104:

> 102: 
> 103:     sun.jvm.hotspot.types.Field f = 
> type.getField("_speculations_offset", false, false);
> 104:     if (f != null) {

Why is there a need for a null check here?

-------------

PR Review: https://git.openjdk.org/jdk/pull/28866#pullrequestreview-3588754711
PR Review Comment: https://git.openjdk.org/jdk/pull/28866#discussion_r2627897856

Reply via email to