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.
src/hotspot/share/code/nmethod.cpp line 487:
> 485: void nmethod::set_deoptimized_done() {
> 486: ConditionalMutexLocker ml(NMethodState_lock,
> !NMethodState_lock->owned_by_self(), Mutex::_no_safepoint_check_flag);
> 487: if (_hdr->_deoptimization_status != NMethodHeader::deoptimize_done) {
> // can't go backwards
Suggestion:
if (deoptimization_status() != deoptimize_done) { // can't go backwards
Create an accessor for `deoptimization_status`. Why is it now necessary to use
`NMethodHeader::`?
src/hotspot/share/code/nmethod.cpp line 1301:
> 1299: _hdr->_compiler_type = type;
> 1300: _hdr->_orig_pc_offset = 0;
> 1301: _hdr->_num_stack_arg_slots = 0;
It'd be better to move this into a separate initializer for `NMethodHeader`.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/28866#discussion_r2731224628
PR Review Comment: https://git.openjdk.org/jdk/pull/28866#discussion_r2731235594