Code review request: JDK-8001592 NMT: assertion failed: assert(_amount >= amt) failed: Just check: memBaseline.hpp:180
Zhengyu Gu
zhengyu.gu at oracle.com
Wed Nov 7 08:26:01 PST 2012
The assertion failure reflects that total memory that backs arenas are
greater than total memory chunks for backing all arenas, which is
obviously incorrect.
The problem is due to Arena object, although it is declared as C-heap
object, but it is used as value objects and stack objects as well. Value
and stack objects do not have tracking records in NMT, which can leave
arena size records alone in NMT. Because NMT uses Arena's deallocation
records to cleanup size records, that means those leftover size records
are not get cleanup.
The solution is to use Arena's destructor to reset arena size to 0, and
NMT uses this record to remove the corresponding record.
The webrev also cleanup Memsnapshot::merge() routine, since virtual
memory records now are stored in separate array, malloc staging area can
keep only one record for each address (whoever has higher sequence
number win), which should reduce memory usage by NMT.
Webrev: http://cr.openjdk.java.net/~zgu/8001592/webrev.00/
Tests:
vm.quick.testlist on Linux 32, Windows x64, Solaris AMD64 and Sparcv9
JPTR tests
Thanks,
-Zhengyu
More information about the hotspot-dev
mailing list