Relates :
|
The following code: char* os::attempt_reserve_memory_at(size_t bytes, char* addr, int file_desc) { char* result = NULL; if (file_desc != -1) { result = pd_attempt_reserve_memory_at(bytes, addr, file_desc); if (result != NULL) { MemTracker::record_virtual_memory_reserve_and_commit((address)result, bytes, CALLER_PC); } } else { result = pd_attempt_reserve_memory_at(bytes, addr); if (result != NULL) { MemTracker::record_virtual_memory_reserve_and_commit((address)result, bytes, CALLER_PC); } } return result; } shouldn't be calling record_virtual_memory_reserve_and_commit in the last conditional. It should be using record_virtual_memory_reserve. Just like os::reserve_memory does: char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint, int file_desc) { char* result = NULL; if (file_desc != -1) { // Could have called pd_reserve_memory() followed by replace_existing_mapping_with_file_mapping(), // but AIX may use SHM in which case its more trouble to detach the segment and remap memory to the file. result = os::map_memory_to_file(addr, bytes, file_desc); if (result != NULL) { MemTracker::record_virtual_memory_reserve_and_commit((address)result, bytes, CALLER_PC); } } else { result = pd_reserve_memory(bytes, addr, alignment_hint); if (result != NULL) { MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); } } return result; }