Integrated: 8318817: Could not reserve enough space in CodeHeap 'profiled nmethods' (0K)
Daniel Lundén
duke at openjdk.org
Tue Nov 14 07:52:52 UTC 2023
On Thu, 26 Oct 2023 09:33:16 GMT, Daniel Lundén <duke at openjdk.org> wrote:
> This changeset fixes an issue where certain large values of `-XX:NMethodSizeLimit` could cause code heap initialization to fail with the error message
>
> Error occurred during initialization of VM
> Could not reserve enough space in CodeHeap 'profiled nmethods' (0K)
>
>
> Two components in `CodeCache::initialize_heaps` may cause the error:
> 1. The minimum size (`min_size = os::vm_page_size();`) for profiled and non-profiled code heaps is sometimes not large enough. Specifically, when `profiled_size` and/or `non_profiled_size` are set to `min_size` and `alignment > os::vm_page_size()`, the `align_down` below (from `CodeCache::initialize_heaps`) sets the size to 0.
> ```
> const size_t alignment = MAX2(ps, os::vm_allocation_granularity());
> non_nmethod_size = align_up(non_nmethod_size, alignment);
> profiled_size = align_down(profiled_size, alignment);
> non_profiled_size = align_down(non_profiled_size, alignment);
> ```
> 2. The calculation for default code heap sizes does not consider the edge case when `cache_size > non_nmethod_size > cache_size - 2 * min_size`.
>
> This changeset
> 1. ensures that `min_size >= alignment`, and
> 2. fixes the edge case.
>
> The changeset includes new tests that exercise the above, also in combination with `-XX:+UseTransparentHugePages` on Linux to test the case when `os::can_execute_large_page_memory()` is true (which can affect `alignment`).
>
> ### Testing (on all Oracle-supported platforms)
> `tier1`, `tier2`, `tier3`, `tier4`, `tier5`
This pull request has now been integrated.
Changeset: 7df73a23
Author: Daniel Lundén <daniel.lunden at oracle.com>
Committer: Roberto Castañeda Lozano <rcastanedalo at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/7df73a23d3b459b3358c460466ebfe0fd942c99d
Stats: 93 lines in 2 files changed: 82 ins; 2 del; 9 mod
8318817: Could not reserve enough space in CodeHeap 'profiled nmethods' (0K)
Reviewed-by: stuefe, rcastanedalo
-------------
PR: https://git.openjdk.org/jdk/pull/16373
More information about the hotspot-compiler-dev
mailing list