RFR Bug-pending: Enable Hotspot to Track Native Memory Usage for Direct Byte Buffers
adam.farley at uk.ibm.com
Tue Jun 5 13:46:08 UTC 2018
Native memory allocation for DBBs is tracked in java.nio.Bits, but that
only includes what the user thinks they are allocating.
When the VM adds extra memory to the allocation amount this extra bit is
not represented in the Bits total. A cursory glance
shows, minimum, that we round the requested memory quantity up to the heap
word size in the Unsafe.allocateMemory code, and
something to do with nmt_header_size in os:malloc() (os.cpp) too.
On its own, and in small quantities, align_up(sz, HeapWordSize) isn't that
big of an issue. But when you allocate a lot of DBBs,
and coupled with the nmt_header_size business, it makes the Bits values
wrong. The more DBB allocations, the more inaccurate those
numbers will be.
To get the "+X", it seems to me that the best option would be to introduce
an native method in Bits that fetches "X" directly
from Hotspot, using the same code that Hotspot uses (so we'd have to
abstract-out the Hotspot logic that adds X to the memory
quantity). This way, anyone modifying the Hotspot logic won't risk
rendering the Bits logic wrong again.
That's only one way to fix the accuracy problem here though. Suggestions
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
More information about the hotspot-dev