234
235 static inline Tracker get_virtual_memory_release_tracker() {
236 assert(tracking_level() >= NMT_summary, "Check by caller");
237 return Tracker(Tracker::release);
238 }
239
240 static inline void record_virtual_memory_type(void* addr, MEMFLAGS flag) {
241 if (tracking_level() < NMT_summary) return;
242 if (addr != NULL) {
243 ThreadCritical tc;
244 if (tracking_level() < NMT_summary) return;
245 VirtualMemoryTracker::set_reserved_region_type((address)addr, flag);
246 }
247 }
248
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_and_commit(addr, size, CALLER_PC, mtThreadStack);
255 }
256 }
257
258 static inline void release_thread_stack(void* addr, size_t size) {
259 if (tracking_level() < NMT_summary) return;
260 if (addr != NULL) {
261 // uses thread stack malloc slot for book keeping number of threads
262 MallocMemorySummary::record_free(0, mtThreadStack);
263 ThreadCritical tc;
264 if (tracking_level() < NMT_summary) return;
265 VirtualMemoryTracker::remove_released_region((address)addr, size);
266 }
267 }
268
269 // Query lock is used to synchronize the access to tracking data.
270 // So far, it is only used by JCmd query, but it may be used by
271 // other tools.
272 static inline Mutex* query_lock() { return _query_lock; }
273
274 // Make a final report or report for hs_err file.
|
234
235 static inline Tracker get_virtual_memory_release_tracker() {
236 assert(tracking_level() >= NMT_summary, "Check by caller");
237 return Tracker(Tracker::release);
238 }
239
240 static inline void record_virtual_memory_type(void* addr, MEMFLAGS flag) {
241 if (tracking_level() < NMT_summary) return;
242 if (addr != NULL) {
243 ThreadCritical tc;
244 if (tracking_level() < NMT_summary) return;
245 VirtualMemoryTracker::set_reserved_region_type((address)addr, flag);
246 }
247 }
248
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 }
256 }
257
258 static inline void release_thread_stack(void* addr, size_t size) {
259 if (tracking_level() < NMT_summary) return;
260 if (addr != NULL) {
261 // uses thread stack malloc slot for book keeping number of threads
262 MallocMemorySummary::record_free(0, mtThreadStack);
263 ThreadCritical tc;
264 if (tracking_level() < NMT_summary) return;
265 VirtualMemoryTracker::remove_released_region((address)addr, size);
266 }
267 }
268
269 // Query lock is used to synchronize the access to tracking data.
270 // So far, it is only used by JCmd query, but it may be used by
271 // other tools.
272 static inline Mutex* query_lock() { return _query_lock; }
273
274 // Make a final report or report for hs_err file.
|