--- old/src/share/vm/runtime/os.hpp 2016-12-12 09:51:38.454525817 -0800 +++ new/src/share/vm/runtime/os.hpp 2016-12-12 09:51:38.350525819 -0800 @@ -107,8 +107,8 @@ } static char* pd_reserve_memory(size_t bytes, char* addr = 0, - size_t alignment_hint = 0); - static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr); + size_t alignment_hint = 0, int file_desc = -1); + static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr, int file_desc = -1); 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 +301,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 +338,12 @@ static bool pd_create_stack_guard_pages(char* addr, size_t bytes); static bool remove_stack_guard_pages(char* addr, size_t bytes); + // Map the given address to the file descriptor. + static char* map_memory_to_file(char* base, size_t size, int fd); + + // Helper function to create a new file with template jvmheap.XXXXXX + static int create_file_for_heap(const char* dir, size_t size); + 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);