comparison src/share/vm/services/memTracker.hpp @ 20553:417e3b8d04c5

8059100: SIGSEGV VirtualMemoryTracker::remove_released_region Summary: Disallow increasing native memory tracking level Reviewed-by: hseigel, ctornqvi, gtriantafill
author coleenp
date Fri, 10 Oct 2014 19:36:12 +0000
parents c6211b707068
children
comparison
equal deleted inserted replaced
20547:fffbcc20bf61 20553:417e3b8d04c5
68 static inline void record_virtual_memory_type(void* addr, MEMFLAGS flag) { } 68 static inline void record_virtual_memory_type(void* addr, MEMFLAGS flag) { }
69 static inline void record_thread_stack(void* addr, size_t size) { } 69 static inline void record_thread_stack(void* addr, size_t size) { }
70 static inline void release_thread_stack(void* addr, size_t size) { } 70 static inline void release_thread_stack(void* addr, size_t size) { }
71 71
72 static void final_report(outputStream*) { } 72 static void final_report(outputStream*) { }
73 static void error_report(outputStream*) { }
73 }; 74 };
74 75
75 #else 76 #else
76 77
77 #include "runtime/atomic.hpp" 78 #include "runtime/atomic.hpp"
268 // Query lock is used to synchronize the access to tracking data. 269 // Query lock is used to synchronize the access to tracking data.
269 // So far, it is only used by JCmd query, but it may be used by 270 // So far, it is only used by JCmd query, but it may be used by
270 // other tools. 271 // other tools.
271 static inline Mutex* query_lock() { return _query_lock; } 272 static inline Mutex* query_lock() { return _query_lock; }
272 273
273 // Make a final report and shutdown. 274 // Make a final report or report for hs_err file.
274 // This function generates summary report without creating snapshots, 275 static void error_report(outputStream* output) {
275 // to avoid additional memory allocation. It uses native memory summary 276 if (tracking_level() >= NMT_summary) {
276 // counters, and makes adjustment to them, once the adjustment is made, 277 report(true, output); // just print summary for error case.
277 // the counters are no longer accurate. As the result, this function 278 }
278 // should only be used for final reporting before shutting down. 279 }
279 static void final_report(outputStream*); 280
281 static void final_report(outputStream* output) {
282 NMT_TrackingLevel level = tracking_level();
283 if (level >= NMT_summary) {
284 report(level == NMT_summary, output);
285 }
286 }
287
280 288
281 // Stored baseline 289 // Stored baseline
282 static inline MemBaseline& get_baseline() { 290 static inline MemBaseline& get_baseline() {
283 return _baseline; 291 return _baseline;
284 } 292 }
289 297
290 static void tuning_statistics(outputStream* out); 298 static void tuning_statistics(outputStream* out);
291 299
292 private: 300 private:
293 static NMT_TrackingLevel init_tracking_level(); 301 static NMT_TrackingLevel init_tracking_level();
302 static void report(bool summary_only, outputStream* output);
294 303
295 private: 304 private:
296 // Tracking level 305 // Tracking level
297 static volatile NMT_TrackingLevel _tracking_level; 306 static volatile NMT_TrackingLevel _tracking_level;
298 // If NMT option value passed by launcher through environment 307 // If NMT option value passed by launcher through environment