Print this page


Split Split Close
Expand all
Collapse all
          --- old/src/share/vm/services/memTracker.cpp
          +++ new/src/share/vm/services/memTracker.cpp
↓ open down ↓ 565 lines elided ↑ open up ↑
 566  566      MemRecorder* rec = thread->get_recorder();
 567  567      if (rec != NULL) {
 568  568        enqueue_pending_recorder(rec);
 569  569        thread->set_recorder(NULL);
 570  570      }
 571  571    }
 572  572  }
 573  573  
 574  574  // baseline current memory snapshot
 575  575  bool MemTracker::baseline() {
 576      -  MutexLockerEx lock(_query_lock, true);
      576 +  MutexLocker lock(_query_lock);
 577  577    MemSnapshot* snapshot = get_snapshot();
 578  578    if (snapshot != NULL) {
 579  579      return _baseline.baseline(*snapshot, false);
 580  580    }
 581  581    return false;
 582  582  }
 583  583  
 584  584  // print memory usage from current snapshot
 585  585  bool MemTracker::print_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) {
 586  586    MemBaseline  baseline;
 587      -  MutexLockerEx lock(_query_lock, true);
      587 +  MutexLocker  lock(_query_lock);
 588  588    MemSnapshot* snapshot = get_snapshot();
 589  589    if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) {
 590  590      BaselineReporter reporter(out, unit);
 591  591      reporter.report_baseline(baseline, summary_only);
 592  592      return true;
 593  593    }
 594  594    return false;
 595  595  }
 596  596  
 597  597  // Whitebox API for blocking until the current generation of NMT data has been merged
 598  598  bool MemTracker::wbtest_wait_for_data_merge() {
 599  599    // NMT can't be shutdown while we're holding _query_lock
 600      -  MutexLockerEx lock(_query_lock, true);
      600 +  MutexLocker lock(_query_lock);
 601  601    assert(_worker_thread != NULL, "Invalid query");
 602  602    // the generation at query time, so NMT will spin till this generation is processed
 603  603    unsigned long generation_at_query_time = SequenceGenerator::current_generation();
 604  604    unsigned long current_processing_generation = _processing_generation;
 605  605    // if generation counter overflown
 606  606    bool generation_overflown = (generation_at_query_time < current_processing_generation);
 607  607    long generations_to_wrap = MAX_UNSIGNED_LONG - current_processing_generation;
 608  608    // spin
 609  609    while (!shutdown_in_progress()) {
 610  610      if (!generation_overflown) {
↓ open down ↓ 23 lines elided ↑ open up ↑
 634  634      }
 635  635      snapshot->wait(1000);
 636  636      current_processing_generation = _processing_generation;
 637  637    }
 638  638    // We end up here if NMT is shutting down before our data has been merged
 639  639    return false;
 640  640  }
 641  641  
 642  642  // compare memory usage between current snapshot and baseline
 643  643  bool MemTracker::compare_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) {
 644      -  MutexLockerEx lock(_query_lock, true);
      644 +  MutexLocker lock(_query_lock);
 645  645    if (_baseline.baselined()) {
 646  646      MemBaseline baseline;
 647  647      MemSnapshot* snapshot = get_snapshot();
 648  648      if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) {
 649  649        BaselineReporter reporter(out, unit);
 650  650        reporter.diff_baselines(baseline, _baseline, summary_only);
 651  651        return true;
 652  652      }
 653  653    }
 654  654    return false;
↓ open down ↓ 47 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX