--- old/share/gc/g1/g1PageBasedVirtualSpace.cpp 2018-06-12 04:14:32.499190734 -0700 +++ new/share/gc/g1/g1PageBasedVirtualSpace.cpp 2018-06-12 04:14:32.459190733 -0700 @@ -134,6 +134,20 @@ char* start_addr = page_start(start); size_t size = num_pages * _page_size; + if (((address)start_addr == (address)os::nvdimm_heapbase())) { + // first remove my dummy mapping. + if (os::unmap_memory(start_addr, size)) { + char* nvdimm_addr = os::attempt_reserve_memory_at(size, start_addr, os::nvdimm_fd()); + if (nvdimm_addr != start_addr) { + vm_exit_during_initialization( + err_msg("Could not map memory at %p for NVDIMM %s Fd %d", nvdimm_addr, AllocateOldGenAt, os::nvdimm_fd())); + } else { + log_info(gc, heap)("NVDIMM Memory successfully mapped at %p, Size %lu", start_addr, size); + os::close(os::nvdimm_fd()); + } + } + return; + } os::commit_memory_or_exit(start_addr, size, _page_size, _executable, err_msg("Failed to commit area from " PTR_FORMAT " to " PTR_FORMAT " of length " SIZE_FORMAT ".", p2i(start_addr), p2i(start_addr + size), size));