--- old/src/share/vm/runtime/os.hpp 2017-07-20 17:45:11.645275300 -0700 +++ new/src/share/vm/runtime/os.hpp 2017-07-20 17:45:11.237418800 -0700 @@ -107,8 +107,12 @@ } static char* pd_reserve_memory(size_t bytes, char* addr = 0, - size_t alignment_hint = 0); + size_t alignment_hint = 0); + #if defined(AIX) + static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr, bool use_SHM = true); + #else static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr); + #endif static void pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc); static bool pd_commit_memory(char* addr, size_t bytes, bool executable); @@ -301,11 +305,12 @@ static int vm_allocation_granularity(); static char* reserve_memory(size_t bytes, char* addr = 0, - size_t alignment_hint = 0); + size_t alignment_hint = 0, int file_desc = -1); static char* reserve_memory(size_t bytes, char* addr, size_t alignment_hint, MEMFLAGS flags); - static char* reserve_memory_aligned(size_t size, size_t alignment); - static char* attempt_reserve_memory_at(size_t bytes, char* addr); + static char* reserve_memory_aligned(size_t size, size_t alignment, int file_desc = -1); + static char* attempt_reserve_memory_at(size_t bytes, char* addr, int file_desc = -1); + static void split_reserved_memory(char *base, size_t size, size_t split, bool realloc); static bool commit_memory(char* addr, size_t bytes, bool executable); @@ -337,6 +342,13 @@ static bool pd_create_stack_guard_pages(char* addr, size_t bytes); static bool remove_stack_guard_pages(char* addr, size_t bytes); + // Helper function to create a new file with template jvmheap.XXXXXX + static int create_file_for_heap(const char* dir, size_t size); + // map memory to the dax (direct access) file referred by fd + static char* map_memory_to_dax_file(char* base, size_t size, int fd); + // replace existing reserved memory with file mapping + static char* replace_existing_mapping_with_dax_file_mapping(char* base, size_t size, int fd); + static char* map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only = false, bool allow_exec = false);