Mercurial > hg > truffle
comparison src/share/vm/services/memTracker.cpp @ 6233:d5bc62fcfac7
Merge
author | zgu |
---|---|
date | Thu, 19 Jul 2012 09:10:12 -0400 |
parents | 7e5976e66c62 f1f45dddb0bd |
children | 58a04a45a549 |
comparison
equal
deleted
inserted
replaced
6231:7e5976e66c62 | 6233:d5bc62fcfac7 |
---|---|
52 | 52 |
53 | 53 |
54 MemRecorder* MemTracker::_global_recorder = NULL; | 54 MemRecorder* MemTracker::_global_recorder = NULL; |
55 MemSnapshot* MemTracker::_snapshot = NULL; | 55 MemSnapshot* MemTracker::_snapshot = NULL; |
56 MemBaseline MemTracker::_baseline; | 56 MemBaseline MemTracker::_baseline; |
57 Mutex MemTracker::_query_lock(Monitor::native, "NMT_queryLock"); | 57 Mutex* MemTracker::_query_lock = NULL; |
58 volatile MemRecorder* MemTracker::_merge_pending_queue = NULL; | 58 volatile MemRecorder* MemTracker::_merge_pending_queue = NULL; |
59 volatile MemRecorder* MemTracker::_pooled_recorders = NULL; | 59 volatile MemRecorder* MemTracker::_pooled_recorders = NULL; |
60 MemTrackWorker* MemTracker::_worker_thread = NULL; | 60 MemTrackWorker* MemTracker::_worker_thread = NULL; |
61 int MemTracker::_sync_point_skip_count = 0; | 61 int MemTracker::_sync_point_skip_count = 0; |
62 MemTracker::NMTLevel MemTracker::_tracking_level = MemTracker::NMT_off; | 62 MemTracker::NMTLevel MemTracker::_tracking_level = MemTracker::NMT_off; |
87 if (UseMallocOnly) { | 87 if (UseMallocOnly) { |
88 shutdown(NMT_use_malloc_only); | 88 shutdown(NMT_use_malloc_only); |
89 return; | 89 return; |
90 } | 90 } |
91 | 91 |
92 _query_lock = new (std::nothrow) Mutex(Monitor::max_nonleaf, "NMT_queryLock"); | |
93 if (_query_lock == NULL) { | |
94 shutdown(NMT_out_of_memory); | |
95 return; | |
96 } | |
97 | |
92 debug_only(_main_thread_tid = os::current_thread_id();) | 98 debug_only(_main_thread_tid = os::current_thread_id();) |
93 _state = NMT_bootstrapping_single_thread; | 99 _state = NMT_bootstrapping_single_thread; |
94 NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); | 100 NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); |
95 } | 101 } |
96 } | 102 } |
162 delete_all_pooled_recorders(); | 168 delete_all_pooled_recorders(); |
163 | 169 |
164 { | 170 { |
165 // shared baseline and snapshot are the only objects needed to | 171 // shared baseline and snapshot are the only objects needed to |
166 // create query results | 172 // create query results |
167 MutexLockerEx locker(&_query_lock, true); | 173 MutexLockerEx locker(_query_lock, true); |
168 // cleanup baseline data and snapshot | 174 // cleanup baseline data and snapshot |
169 _baseline.clear(); | 175 _baseline.clear(); |
170 delete _snapshot; | 176 delete _snapshot; |
171 _snapshot = NULL; | 177 _snapshot = NULL; |
172 } | 178 } |
534 } | 540 } |
535 } | 541 } |
536 | 542 |
537 // baseline current memory snapshot | 543 // baseline current memory snapshot |
538 bool MemTracker::baseline() { | 544 bool MemTracker::baseline() { |
539 MutexLockerEx lock(&_query_lock, true); | 545 MutexLockerEx lock(_query_lock, true); |
540 MemSnapshot* snapshot = get_snapshot(); | 546 MemSnapshot* snapshot = get_snapshot(); |
541 if (snapshot != NULL) { | 547 if (snapshot != NULL) { |
542 return _baseline.baseline(*snapshot, false); | 548 return _baseline.baseline(*snapshot, false); |
543 } | 549 } |
544 return false; | 550 return false; |
545 } | 551 } |
546 | 552 |
547 // print memory usage from current snapshot | 553 // print memory usage from current snapshot |
548 bool MemTracker::print_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) { | 554 bool MemTracker::print_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) { |
549 MemBaseline baseline; | 555 MemBaseline baseline; |
550 MutexLockerEx lock(&_query_lock, true); | 556 MutexLockerEx lock(_query_lock, true); |
551 MemSnapshot* snapshot = get_snapshot(); | 557 MemSnapshot* snapshot = get_snapshot(); |
552 if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) { | 558 if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) { |
553 BaselineReporter reporter(out, unit); | 559 BaselineReporter reporter(out, unit); |
554 reporter.report_baseline(baseline, summary_only); | 560 reporter.report_baseline(baseline, summary_only); |
555 return true; | 561 return true; |
557 return false; | 563 return false; |
558 } | 564 } |
559 | 565 |
560 // compare memory usage between current snapshot and baseline | 566 // compare memory usage between current snapshot and baseline |
561 bool MemTracker::compare_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) { | 567 bool MemTracker::compare_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) { |
562 MutexLockerEx lock(&_query_lock, true); | 568 MutexLockerEx lock(_query_lock, true); |
563 if (_baseline.baselined()) { | 569 if (_baseline.baselined()) { |
564 MemBaseline baseline; | 570 MemBaseline baseline; |
565 MemSnapshot* snapshot = get_snapshot(); | 571 MemSnapshot* snapshot = get_snapshot(); |
566 if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) { | 572 if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) { |
567 BaselineReporter reporter(out, unit); | 573 BaselineReporter reporter(out, unit); |