72 _base(0), 73 _size(0), 74 _initialized(false) { 75 76 // Reserve address space for virtual backing file 77 _base = (uintptr_t)os::reserve_memory(MaxHeapSize); 78 if (_base == 0) { 79 // Failed 80 log_error(gc)("Failed to reserve address space for virtual backing file"); 81 return; 82 } 83 84 // Successfully initialized 85 _initialized = true; 86 } 87 88 bool ZBackingFile::is_initialized() const { 89 return _initialized; 90 } 91 92 size_t ZBackingFile::size() const { 93 return _size; 94 } 95 96 bool ZBackingFile::commit_inner(size_t offset, size_t length) { 97 assert(is_aligned(offset, os::vm_page_size()), "Invalid offset"); 98 assert(is_aligned(length, os::vm_page_size()), "Invalid length"); 99 100 log_trace(gc, heap)("Committing memory: " SIZE_FORMAT "M-" SIZE_FORMAT "M (" SIZE_FORMAT "M)", 101 offset / M, (offset + length) / M, length / M); 102 103 const uintptr_t addr = _base + offset; 104 const void* const res = mmap((void*)addr, length, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 105 if (res == MAP_FAILED) { 106 ZErrno err; 107 log_error(gc)("Failed to commit memory (%s)", err.to_string()); 108 return false; 109 } 110 111 const size_t end = offset + length; | 72 _base(0), 73 _size(0), 74 _initialized(false) { 75 76 // Reserve address space for virtual backing file 77 _base = (uintptr_t)os::reserve_memory(MaxHeapSize); 78 if (_base == 0) { 79 // Failed 80 log_error(gc)("Failed to reserve address space for virtual backing file"); 81 return; 82 } 83 84 // Successfully initialized 85 _initialized = true; 86 } 87 88 bool ZBackingFile::is_initialized() const { 89 return _initialized; 90 } 91 92 void ZBackingFile::warn_commit_limits(size_t max) const { 93 // Does nothing 94 } 95 96 size_t ZBackingFile::size() const { 97 return _size; 98 } 99 100 bool ZBackingFile::commit_inner(size_t offset, size_t length) { 101 assert(is_aligned(offset, os::vm_page_size()), "Invalid offset"); 102 assert(is_aligned(length, os::vm_page_size()), "Invalid length"); 103 104 log_trace(gc, heap)("Committing memory: " SIZE_FORMAT "M-" SIZE_FORMAT "M (" SIZE_FORMAT "M)", 105 offset / M, (offset + length) / M, length / M); 106 107 const uintptr_t addr = _base + offset; 108 const void* const res = mmap((void*)addr, length, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 109 if (res == MAP_FAILED) { 110 ZErrno err; 111 log_error(gc)("Failed to commit memory (%s)", err.to_string()); 112 return false; 113 } 114 115 const size_t end = offset + length; |