7181995: NMT ON: NMT assertion failure assert(cur_vm->is_uncommit_record() || cur_vm->is_deallocation_record

Fixed virtual memory records merge and promotion logic, should be based on sequence number vs. base address order

Reviewed-by: coleenp, acorn
This commit is contained in:
Zhengyu Gu 2012-09-11 20:53:17 -04:00
parent 6f32be5139
commit 442e4b0e54
7 changed files with 403 additions and 390 deletions

View file

@ -318,10 +318,9 @@ void Thread::record_stack_base_and_size() {
set_stack_size(os::current_stack_size());
// record thread's native stack, stack grows downward
address vm_base = _stack_base - _stack_size;
MemTracker::record_virtual_memory_reserve(vm_base, _stack_size,
CURRENT_PC, this);
MemTracker::record_virtual_memory_type(vm_base, mtThreadStack);
address low_stack_addr = stack_base() - stack_size();
MemTracker::record_thread_stack(low_stack_addr, stack_size(), this,
CURRENT_PC);
}
@ -329,8 +328,8 @@ Thread::~Thread() {
// Reclaim the objectmonitors from the omFreeList of the moribund thread.
ObjectSynchronizer::omFlush (this) ;
MemTracker::record_virtual_memory_release((_stack_base - _stack_size),
_stack_size, this);
address low_stack_addr = stack_base() - stack_size();
MemTracker::release_thread_stack(low_stack_addr, stack_size(), this);
// deallocate data structures
delete resource_area();