--- old/src/share/vm/runtime/thread.cpp 2012-09-14 11:08:35.670341000 -0400 +++ new/src/share/vm/runtime/thread.cpp 2012-09-14 11:08:34.542772000 -0400 @@ -328,8 +328,14 @@ // Reclaim the objectmonitors from the omFreeList of the moribund thread. ObjectSynchronizer::omFlush (this) ; - address low_stack_addr = stack_base() - stack_size(); - MemTracker::release_thread_stack(low_stack_addr, stack_size(), this); + // stack_base can be NULL if the thread is never started or exited before + // record_stack_base_and_size called. Although, we would like to ensure + // that all started threads do call record_stack_base_and_size(), there is + // not proper way to enforce that. + if (_stack_base != NULL) { + address low_stack_addr = stack_base() - stack_size(); + MemTracker::release_thread_stack(low_stack_addr, stack_size(), this); + } // deallocate data structures delete resource_area();