RFR: 8306841: Generational ZGC: NMT reports Java heap size larger than max heap size

Stefan Karlsson stefank at openjdk.org
Wed Jun 7 13:38:09 UTC 2023


ZGC has separated the committing of physical memory from the mapping of the committed memory to virtual memory. It also has asynchronous, lazy unmapping of virtual memory from physical memory. This leads to a situation where multiple virtual memory areas can be mapped to the same physical memory. NMT has a strong assumption that there's a 1-to-1 correspondence between committed memory and its virtual memory areas. Because of this NMT and ZGC is not entirely compatible. ZGC has worked around this by adding NMT hooks where the virtual memory is mapped to the committed memory. This mostly works, but there are situations where we have multiple virtual memory areas mapped to the same physical memory, and that causes the NMT values to be inflated.

I propose that we move the NMT committed memory tracking from the mapping of virtual memory to the actual committing of physical memory.

FWIW, given that NMT and ZGC doesn't agree about how memory is committed, we have to fake the virtual memory addresses reported to NMT. This could probably be noticed if you look for the Java heap addresses in the NMT details output, but I don't see why anyone should be looking for those address for the Java heap in NMT. The interesting number is the amount of committed memory, not the exact addresses, IMHO. This isn't something that we change with this patch, but it can be worth understanding while looking at this Bug and the associated PR.

-------------

Commit messages:
 - 8306841: ZGC: NMT reports Java heap size larger than max heap size

Changes: https://git.openjdk.org/jdk/pull/14355/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14355&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8306841
  Stats: 128 lines in 2 files changed: 104 ins; 18 del; 6 mod
  Patch: https://git.openjdk.org/jdk/pull/14355.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14355/head:pull/14355

PR: https://git.openjdk.org/jdk/pull/14355


More information about the hotspot-dev mailing list