--- old/src/share/vm/runtime/os.cpp 2017-07-20 17:45:08.892412600 -0700 +++ new/src/share/vm/runtime/os.cpp 2017-07-20 17:45:08.516573900 -0700 @@ -1628,10 +1628,23 @@ return os::pd_create_stack_guard_pages(addr, bytes); } -char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { - char* result = pd_reserve_memory(bytes, addr, alignment_hint); - if (result != NULL) { - MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); +char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint, int file_desc) { + + char* result = NULL; + + if (file_desc != -1) { + // Do your own memory mapping instead of doing + // pd_reserve_memory() followed by replace_existing_mapping_with_dax_file_mapping(), because AIX might use SHM + result = os::map_memory_to_dax_file(addr, bytes, file_desc); + if (result != NULL) { + MemTracker::record_virtual_memory_reserve_and_commit((address)result, bytes, CALLER_PC); + } + } + else { + result = pd_reserve_memory(bytes, addr, alignment_hint); + if (result != NULL) { + MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } } return result; @@ -1648,14 +1661,6 @@ return result; } -char* os::attempt_reserve_memory_at(size_t bytes, char* addr) { - char* result = pd_attempt_reserve_memory_at(bytes, addr); - if (result != NULL) { - MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); - } - return result; -} - void os::split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { pd_split_reserved_memory(base, size, split, realloc);