From e306367813db7c8a3ecac5e46740600b7ab04f9d Mon Sep 17 00:00:00 2001 From: Ioi Lam Date: Thu, 29 May 2025 17:06:42 +0000 Subject: [PATCH] 8357693: AOTCodeCompressedOopsTest.java failed with -XX:+UseLargePages Reviewed-by: kvn, shade --- src/hotspot/share/cds/filemap.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/cds/filemap.cpp b/src/hotspot/share/cds/filemap.cpp index 375a3ccffbc..723b5298646 100644 --- a/src/hotspot/share/cds/filemap.cpp +++ b/src/hotspot/share/cds/filemap.cpp @@ -1666,10 +1666,13 @@ bool FileMapInfo::map_heap_region_impl() { char* addr = (char*)_mapped_heap_memregion.start(); char* base; - if (MetaspaceShared::use_windows_memory_mapping()) { + if (MetaspaceShared::use_windows_memory_mapping() || UseLargePages) { + // With UseLargePages, memory mapping may fail on some OSes if the size is not + // large page aligned, so let's use read() instead. In this case, the memory region + // is already commited by G1 so we don't need to commit it again. if (!read_region(MetaspaceShared::hp, addr, align_up(_mapped_heap_memregion.byte_size(), os::vm_page_size()), - /* do_commit = */ true)) { + /* do_commit = */ !UseLargePages)) { dealloc_heap_region(); aot_log_error(aot)("Failed to read archived heap region into " INTPTR_FORMAT, p2i(addr)); return false;