Mercurial > hg > truffle
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 |