JDK-8198225 : os::attempt_reserve_memory_at records memory as committed
  • Type: Bug
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: 11
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2018-02-15
  • Updated: 2019-06-20
  • Resolved: 2018-02-21
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 11
11 b03Fixed
Related Reports
Relates :  
Description
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;
}