--- old/src/hotspot/share/gc/g1/g1CollectedHeap.cpp 2018-11-19 11:33:02.929012007 -0800 +++ new/src/hotspot/share/gc/g1/g1CollectedHeap.cpp 2018-11-19 11:33:02.469012026 -0800 @@ -1564,6 +1564,22 @@ guarantee(_task_queues != NULL, "task_queues allocation failure."); } +static size_t actual_reserved_page_size(ReservedSpace rs) { + size_t page_size = os::vm_page_size(); + if (UseLargePages) { + // There are two ways to manage large page memory. + // 1. OS supports committing large page memory. + // 2. OS doesn't support committing large page memory so ReservedSpace manages it. + // And ReservedSpace calls it 'special'. If we failed to set 'special', + // we reserved memory without large page. + if (os::can_commit_large_page_memory() || rs.special()) { + page_size = os::large_page_size(); + } + } + + return page_size; +} + G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* description, size_t size, size_t translation_factor) { @@ -1658,7 +1674,7 @@ // Carve out the G1 part of the heap. ReservedSpace g1_rs = heap_rs.first_part(max_byte_size); - size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size(); + size_t page_size = actual_reserved_page_size(heap_rs); G1RegionToSpaceMapper* heap_storage = G1RegionToSpaceMapper::create_mapper(g1_rs, g1_rs.size(),