< prev index next >

src/os/posix/vm/os_posix.cpp

Print this page

        

@@ -143,11 +143,11 @@
 }
 
 // Multiple threads can race in this code, and can remap over each other with MAP_FIXED,
 // so on posix, unmap the section at the start and at the end of the chunk that we mapped
 // rather than unmapping and remapping the whole chunk to get requested alignment.
-char* os::reserve_memory_aligned(size_t size, size_t alignment) {
+char* os::reserve_memory_aligned(size_t size, size_t alignment, int file_desc) {
   assert((alignment & (os::vm_allocation_granularity() - 1)) == 0,
       "Alignment must be a multiple of allocation granularity (page size)");
   assert((size & (alignment -1)) == 0, "size must be 'alignment' aligned");
 
   size_t extra_size = size + alignment;

@@ -178,10 +178,15 @@
 
   if (end_offset > 0) {
       os::release_memory(extra_base + begin_offset + size, end_offset);
   }
 
+  if (file_desc != -1) {
+    if (os::map_memory_to_file(aligned_base, size, file_desc) == NULL) {
+      vm_exit_during_initialization(err_msg("Error in mapping Java heap at the given filesystem directory"));
+    }
+  }
   return aligned_base;
 }
 
 int os::log_vsnprintf(char* buf, size_t len, const char* fmt, va_list args) {
     return vsnprintf(buf, len, fmt, args);
< prev index next >