229 ThreadCritical tc;
230 if (tracking_level() < NMT_summary) return;
231 VirtualMemoryTracker::add_committed_region((address)addr, size, stack);
232 }
233 }
234
235 static inline void record_virtual_memory_type(void* addr, MEMFLAGS flag) {
236 if (tracking_level() < NMT_summary) return;
237 if (addr != NULL) {
238 ThreadCritical tc;
239 if (tracking_level() < NMT_summary) return;
240 VirtualMemoryTracker::set_reserved_region_type((address)addr, flag);
241 }
242 }
243
244 static inline void record_thread_stack(void* addr, size_t size) {
245 if (tracking_level() < NMT_summary) return;
246 if (addr != NULL) {
247 // uses thread stack malloc slot for book keeping number of threads
248 MallocMemorySummary::record_malloc(0, mtThreadStack);
249 record_virtual_memory_reserve_and_commit(addr, size, CALLER_PC, mtThreadStack);
250 }
251 }
252
253 static inline void release_thread_stack(void* addr, size_t size) {
254 if (tracking_level() < NMT_summary) return;
255 if (addr != NULL) {
256 // uses thread stack malloc slot for book keeping number of threads
257 MallocMemorySummary::record_free(0, mtThreadStack);
258 ThreadCritical tc;
259 if (tracking_level() < NMT_summary) return;
260 VirtualMemoryTracker::remove_released_region((address)addr, size);
261 }
262 }
263
264 // Query lock is used to synchronize the access to tracking data.
265 // So far, it is only used by JCmd query, but it may be used by
266 // other tools.
267 static inline Mutex* query_lock() { return _query_lock; }
268
269 // Make a final report or report for hs_err file.
|
229 ThreadCritical tc;
230 if (tracking_level() < NMT_summary) return;
231 VirtualMemoryTracker::add_committed_region((address)addr, size, stack);
232 }
233 }
234
235 static inline void record_virtual_memory_type(void* addr, MEMFLAGS flag) {
236 if (tracking_level() < NMT_summary) return;
237 if (addr != NULL) {
238 ThreadCritical tc;
239 if (tracking_level() < NMT_summary) return;
240 VirtualMemoryTracker::set_reserved_region_type((address)addr, flag);
241 }
242 }
243
244 static inline void record_thread_stack(void* addr, size_t size) {
245 if (tracking_level() < NMT_summary) return;
246 if (addr != NULL) {
247 // uses thread stack malloc slot for book keeping number of threads
248 MallocMemorySummary::record_malloc(0, mtThreadStack);
249 record_virtual_memory_reserve(addr, size, CALLER_PC, mtThreadStack);
250 }
251 }
252
253 static inline void release_thread_stack(void* addr, size_t size) {
254 if (tracking_level() < NMT_summary) return;
255 if (addr != NULL) {
256 // uses thread stack malloc slot for book keeping number of threads
257 MallocMemorySummary::record_free(0, mtThreadStack);
258 ThreadCritical tc;
259 if (tracking_level() < NMT_summary) return;
260 VirtualMemoryTracker::remove_released_region((address)addr, size);
261 }
262 }
263
264 // Query lock is used to synchronize the access to tracking data.
265 // So far, it is only used by JCmd query, but it may be used by
266 // other tools.
267 static inline Mutex* query_lock() { return _query_lock; }
268
269 // Make a final report or report for hs_err file.
|