On Wed, 18 Feb 2026 17:02:39 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. > > Mikhail Ablakatov has updated the pull request with a new target base due to > a merge or a rebase. The pull request now contains three commits: > > - cleanup: remove redundant comments > - Merge branch 'master' at a86a847f57a > - 8373794: Move nmethod header from CodeCache: > > 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. src/hotspot/share/code/codeBlob.cpp line 222: > 220: } > 221: } > 222: Shouldn't this be handled in a `nmethod::Vptr` method instead of here? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/28866#discussion_r2826874293
