< prev index next >

src/hotspot/os/aix/os_aix.cpp

Print this page

        

*** 2489,2512 **** bool os::can_execute_large_page_memory() { // Does not matter, we do not support huge pages. return false; } // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). ! char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr, bool use_SHM) { char* addr = NULL; // Always round to os::vm_page_size(), which may be larger than 4K. bytes = align_up(bytes, os::vm_page_size()); // In 4K mode always use mmap. // In 64K mode allocate small sizes with mmap, large ones with 64K shmatted. if (os::vm_page_size() == 4*K) { return reserve_mmaped_memory(bytes, requested_addr, 0); } else { ! if (use_SHM && bytes >= Use64KPagesThreshold) { return reserve_shmated_memory(bytes, requested_addr, 0); } else { return reserve_mmaped_memory(bytes, requested_addr, 0); } } --- 2489,2528 ---- bool os::can_execute_large_page_memory() { // Does not matter, we do not support huge pages. return false; } + char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr, int file_desc) { + assert(file_desc >= 0, "file_desc is not valid"); + char* result = NULL; + + // Always round to os::vm_page_size(), which may be larger than 4K. + bytes = align_up(bytes, os::vm_page_size()); + result = reserve_mmaped_memory(bytes, requested_addr, 0); + + if (result != NULL) { + if (replace_existing_mapping_with_dax_file_mapping(result, bytes, file_desc) == NULL) { + vm_exit_during_initialization(err_msg("Error in mapping Java heap at the given filesystem directory")); + } + } + return result; + } + // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). ! char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { char* addr = NULL; // Always round to os::vm_page_size(), which may be larger than 4K. bytes = align_up(bytes, os::vm_page_size()); // In 4K mode always use mmap. // In 64K mode allocate small sizes with mmap, large ones with 64K shmatted. if (os::vm_page_size() == 4*K) { return reserve_mmaped_memory(bytes, requested_addr, 0); } else { ! if (bytes >= Use64KPagesThreshold) { return reserve_shmated_memory(bytes, requested_addr, 0); } else { return reserve_mmaped_memory(bytes, requested_addr, 0); } }
< prev index next >