diff -r e6c86f6012bf -r c31faeacf00a src/hotspot/share/services/memTracker.hpp --- a/src/hotspot/share/services/memTracker.hpp Tue Mar 26 15:27:41 2019 -0400 +++ b/src/hotspot/share/services/memTracker.hpp Tue Mar 26 15:50:34 2019 -0400 @@ -82,6 +82,7 @@ #include "runtime/mutexLocker.hpp" #include "runtime/threadCritical.hpp" #include "services/mallocTracker.hpp" +#include "services/threadStackTracker.hpp" #include "services/virtualMemoryTracker.hpp" extern volatile bool NMT_stack_walkable; @@ -241,31 +242,19 @@ } } -#ifdef _AIX - // See JDK-8202772 - temporarily disable thread stack tracking on AIX. - static inline void record_thread_stack(void* addr, size_t size) {} - static inline void release_thread_stack(void* addr, size_t size) {} -#else - static inline void record_thread_stack(void* addr, size_t size) { + static void record_thread_stack(void* addr, size_t size) { if (tracking_level() < NMT_summary) return; if (addr != NULL) { - // uses thread stack malloc slot for book keeping number of threads - MallocMemorySummary::record_malloc(0, mtThreadStack); - record_virtual_memory_reserve(addr, size, CALLER_PC, mtThreadStack); + ThreadStackTracker::new_thread_stack((address)addr, size, CALLER_PC); } } static inline void release_thread_stack(void* addr, size_t size) { if (tracking_level() < NMT_summary) return; if (addr != NULL) { - // uses thread stack malloc slot for book keeping number of threads - MallocMemorySummary::record_free(0, mtThreadStack); - ThreadCritical tc; - if (tracking_level() < NMT_summary) return; - VirtualMemoryTracker::remove_released_region((address)addr, size); + ThreadStackTracker::delete_thread_stack((address)addr, size); } } -#endif // Query lock is used to synchronize the access to tracking data. // So far, it is only used by JCmd query, but it may be used by