--- old/src/hotspot/share/runtime/memprofiler.cpp Wed Nov 8 09:06:21 2017 +++ new/src/hotspot/share/runtime/memprofiler.cpp Wed Nov 8 09:06:20 2017 @@ -36,6 +36,7 @@ #include "runtime/os.hpp" #include "runtime/task.hpp" #include "runtime/thread.inline.hpp" +#include "runtime/threadSMR.hpp" #include "runtime/vmThread.hpp" #ifndef PRODUCT @@ -109,21 +110,22 @@ // Calculate thread local sizes size_t handles_memory_usage = VMThread::vm_thread()->handle_area()->size_in_bytes(); size_t resource_memory_usage = VMThread::vm_thread()->resource_area()->size_in_bytes(); - JavaThread *cur = Threads::first(); - while (cur != NULL) { - handles_memory_usage += cur->handle_area()->size_in_bytes(); - resource_memory_usage += cur->resource_area()->size_in_bytes(); - cur = cur->next(); + { + JavaThreadIteratorWithHandle jtiwh; + for (; JavaThread *cur = jtiwh.next(); ) { + handles_memory_usage += cur->handle_area()->size_in_bytes(); + resource_memory_usage += cur->resource_area()->size_in_bytes(); + } + + // Print trace line in log + fprintf(_log_fp, "%6.1f,%5d,%5d," UINTX_FORMAT_W(6) "," UINTX_FORMAT_W(6) ",", + os::elapsedTime(), + jtiwh.length(), + InstanceKlass::number_of_instance_classes(), + Universe::heap()->used() / K, + Universe::heap()->capacity() / K); } - // Print trace line in log - fprintf(_log_fp, "%6.1f,%5d,%5d," UINTX_FORMAT_W(6) "," UINTX_FORMAT_W(6) ",", - os::elapsedTime(), - Threads::number_of_threads(), - InstanceKlass::number_of_instance_classes(), - Universe::heap()->used() / K, - Universe::heap()->capacity() / K); - fprintf(_log_fp, UINTX_FORMAT_W(6) ",", CodeCache::capacity() / K); fprintf(_log_fp, UINTX_FORMAT_W(6) "," UINTX_FORMAT_W(6) ",%6ld\n",