< prev index next >
src/hotspot/share/services/memTracker.hpp
Print this page
rev 53982 : Thread stack tracking
*** 80,89 ****
--- 80,90 ----
#else
#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;
#define CURRENT_PC ((MemTracker::tracking_level() == NMT_detail && NMT_stack_walkable) ? \
*** 239,273 ****
if (tracking_level() < NMT_summary) return;
VirtualMemoryTracker::set_reserved_region_type((address)addr, flag);
}
}
! #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) {
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);
}
}
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);
}
}
- #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
// other tools.
static inline Mutex* query_lock() {
--- 240,262 ----
if (tracking_level() < NMT_summary) return;
VirtualMemoryTracker::set_reserved_region_type((address)addr, flag);
}
}
! static void record_thread_stack(void* addr, size_t size) {
if (tracking_level() < NMT_summary) return;
if (addr != NULL) {
! 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) {
! ThreadStackTracker::delete_thread_stack((address)addr, size);
}
}
// 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
// other tools.
static inline Mutex* query_lock() {
< prev index next >