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);