src/hotspot/share/services/memTracker.hpp
changeset 54292 c31faeacf00a
parent 53244 9807daeb47c4
child 55652 2d1acda7555a
equal deleted inserted replaced
54291:e6c86f6012bf 54292:c31faeacf00a
    80 #else
    80 #else
    81 
    81 
    82 #include "runtime/mutexLocker.hpp"
    82 #include "runtime/mutexLocker.hpp"
    83 #include "runtime/threadCritical.hpp"
    83 #include "runtime/threadCritical.hpp"
    84 #include "services/mallocTracker.hpp"
    84 #include "services/mallocTracker.hpp"
       
    85 #include "services/threadStackTracker.hpp"
    85 #include "services/virtualMemoryTracker.hpp"
    86 #include "services/virtualMemoryTracker.hpp"
    86 
    87 
    87 extern volatile bool NMT_stack_walkable;
    88 extern volatile bool NMT_stack_walkable;
    88 
    89 
    89 #define CURRENT_PC ((MemTracker::tracking_level() == NMT_detail && NMT_stack_walkable) ? \
    90 #define CURRENT_PC ((MemTracker::tracking_level() == NMT_detail && NMT_stack_walkable) ? \
   239       if (tracking_level() < NMT_summary) return;
   240       if (tracking_level() < NMT_summary) return;
   240       VirtualMemoryTracker::set_reserved_region_type((address)addr, flag);
   241       VirtualMemoryTracker::set_reserved_region_type((address)addr, flag);
   241     }
   242     }
   242   }
   243   }
   243 
   244 
   244 #ifdef _AIX
   245   static void record_thread_stack(void* addr, size_t size) {
   245   // See JDK-8202772 - temporarily disable thread stack tracking on AIX.
   246     if (tracking_level() < NMT_summary) return;
   246   static inline void record_thread_stack(void* addr, size_t size) {}
   247     if (addr != NULL) {
   247   static inline void release_thread_stack(void* addr, size_t size) {}
   248       ThreadStackTracker::new_thread_stack((address)addr, size, CALLER_PC);
   248 #else
       
   249   static inline void record_thread_stack(void* addr, size_t size) {
       
   250     if (tracking_level() < NMT_summary) return;
       
   251     if (addr != NULL) {
       
   252       // uses thread stack malloc slot for book keeping number of threads
       
   253       MallocMemorySummary::record_malloc(0, mtThreadStack);
       
   254       record_virtual_memory_reserve(addr, size, CALLER_PC, mtThreadStack);
       
   255     }
   249     }
   256   }
   250   }
   257 
   251 
   258   static inline void release_thread_stack(void* addr, size_t size) {
   252   static inline void release_thread_stack(void* addr, size_t size) {
   259     if (tracking_level() < NMT_summary) return;
   253     if (tracking_level() < NMT_summary) return;
   260     if (addr != NULL) {
   254     if (addr != NULL) {
   261       // uses thread stack malloc slot for book keeping number of threads
   255       ThreadStackTracker::delete_thread_stack((address)addr, size);
   262       MallocMemorySummary::record_free(0, mtThreadStack);
   256     }
   263       ThreadCritical tc;
   257   }
   264       if (tracking_level() < NMT_summary) return;
       
   265       VirtualMemoryTracker::remove_released_region((address)addr, size);
       
   266     }
       
   267   }
       
   268 #endif
       
   269 
   258 
   270   // Query lock is used to synchronize the access to tracking data.
   259   // Query lock is used to synchronize the access to tracking data.
   271   // So far, it is only used by JCmd query, but it may be used by
   260   // So far, it is only used by JCmd query, but it may be used by
   272   // other tools.
   261   // other tools.
   273   static inline Mutex* query_lock() {
   262   static inline Mutex* query_lock() {