src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp

changeset 5548
5888334c9c24
parent 5204
e72f7eecc96d
child 5807
c319b188c7b2
     1.1 --- a/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp	Thu Aug 15 10:05:50 2013 +0200
     1.2 +++ b/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp	Thu Aug 15 10:52:18 2013 +0200
     1.3 @@ -127,32 +127,55 @@
     1.4  
     1.5  class HRRSStatsIter: public HeapRegionClosure {
     1.6    size_t _occupied;
     1.7 -  size_t _total_mem_sz;
     1.8 -  size_t _max_mem_sz;
     1.9 -  HeapRegion* _max_mem_sz_region;
    1.10 +
    1.11 +  size_t _total_rs_mem_sz;
    1.12 +  size_t _max_rs_mem_sz;
    1.13 +  HeapRegion* _max_rs_mem_sz_region;
    1.14 +
    1.15 +  size_t _total_code_root_mem_sz;
    1.16 +  size_t _max_code_root_mem_sz;
    1.17 +  HeapRegion* _max_code_root_mem_sz_region;
    1.18  public:
    1.19    HRRSStatsIter() :
    1.20      _occupied(0),
    1.21 -    _total_mem_sz(0),
    1.22 -    _max_mem_sz(0),
    1.23 -    _max_mem_sz_region(NULL)
    1.24 +    _total_rs_mem_sz(0),
    1.25 +    _max_rs_mem_sz(0),
    1.26 +    _max_rs_mem_sz_region(NULL),
    1.27 +    _total_code_root_mem_sz(0),
    1.28 +    _max_code_root_mem_sz(0),
    1.29 +    _max_code_root_mem_sz_region(NULL)
    1.30    {}
    1.31  
    1.32    bool doHeapRegion(HeapRegion* r) {
    1.33 -    size_t mem_sz = r->rem_set()->mem_size();
    1.34 -    if (mem_sz > _max_mem_sz) {
    1.35 -      _max_mem_sz = mem_sz;
    1.36 -      _max_mem_sz_region = r;
    1.37 +    HeapRegionRemSet* hrrs = r->rem_set();
    1.38 +
    1.39 +    // HeapRegionRemSet::mem_size() includes the
    1.40 +    // size of the strong code roots
    1.41 +    size_t rs_mem_sz = hrrs->mem_size();
    1.42 +    if (rs_mem_sz > _max_rs_mem_sz) {
    1.43 +      _max_rs_mem_sz = rs_mem_sz;
    1.44 +      _max_rs_mem_sz_region = r;
    1.45      }
    1.46 -    _total_mem_sz += mem_sz;
    1.47 -    size_t occ = r->rem_set()->occupied();
    1.48 +    _total_rs_mem_sz += rs_mem_sz;
    1.49 +
    1.50 +    size_t code_root_mem_sz = hrrs->strong_code_roots_mem_size();
    1.51 +    if (code_root_mem_sz > _max_code_root_mem_sz) {
    1.52 +      _max_code_root_mem_sz = code_root_mem_sz;
    1.53 +      _max_code_root_mem_sz_region = r;
    1.54 +    }
    1.55 +    _total_code_root_mem_sz += code_root_mem_sz;
    1.56 +
    1.57 +    size_t occ = hrrs->occupied();
    1.58      _occupied += occ;
    1.59      return false;
    1.60    }
    1.61 -  size_t total_mem_sz() { return _total_mem_sz; }
    1.62 -  size_t max_mem_sz() { return _max_mem_sz; }
    1.63 +  size_t total_rs_mem_sz() { return _total_rs_mem_sz; }
    1.64 +  size_t max_rs_mem_sz() { return _max_rs_mem_sz; }
    1.65 +  HeapRegion* max_rs_mem_sz_region() { return _max_rs_mem_sz_region; }
    1.66 +  size_t total_code_root_mem_sz() { return _total_code_root_mem_sz; }
    1.67 +  size_t max_code_root_mem_sz() { return _max_code_root_mem_sz; }
    1.68 +  HeapRegion* max_code_root_mem_sz_region() { return _max_code_root_mem_sz_region; }
    1.69    size_t occupied() { return _occupied; }
    1.70 -  HeapRegion* max_mem_sz_region() { return _max_mem_sz_region; }
    1.71  };
    1.72  
    1.73  double calc_percentage(size_t numerator, size_t denominator) {
    1.74 @@ -184,22 +207,33 @@
    1.75  
    1.76    HRRSStatsIter blk;
    1.77    G1CollectedHeap::heap()->heap_region_iterate(&blk);
    1.78 +  // RemSet stats
    1.79    out->print_cr("  Total heap region rem set sizes = "SIZE_FORMAT"K."
    1.80                  "  Max = "SIZE_FORMAT"K.",
    1.81 -                blk.total_mem_sz()/K, blk.max_mem_sz()/K);
    1.82 +                blk.total_rs_mem_sz()/K, blk.max_rs_mem_sz()/K);
    1.83    out->print_cr("  Static structures = "SIZE_FORMAT"K,"
    1.84                  " free_lists = "SIZE_FORMAT"K.",
    1.85                  HeapRegionRemSet::static_mem_size() / K,
    1.86                  HeapRegionRemSet::fl_mem_size() / K);
    1.87    out->print_cr("    "SIZE_FORMAT" occupied cards represented.",
    1.88                  blk.occupied());
    1.89 -  HeapRegion* max_mem_sz_region = blk.max_mem_sz_region();
    1.90 -  HeapRegionRemSet* rem_set = max_mem_sz_region->rem_set();
    1.91 +  HeapRegion* max_rs_mem_sz_region = blk.max_rs_mem_sz_region();
    1.92 +  HeapRegionRemSet* max_rs_rem_set = max_rs_mem_sz_region->rem_set();
    1.93    out->print_cr("    Max size region = "HR_FORMAT", "
    1.94                  "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
    1.95 -                HR_FORMAT_PARAMS(max_mem_sz_region),
    1.96 -                (rem_set->mem_size() + K - 1)/K,
    1.97 -                (rem_set->occupied() + K - 1)/K);
    1.98 -
    1.99 +                HR_FORMAT_PARAMS(max_rs_mem_sz_region),
   1.100 +                (max_rs_rem_set->mem_size() + K - 1)/K,
   1.101 +                (max_rs_rem_set->occupied() + K - 1)/K);
   1.102    out->print_cr("    Did %d coarsenings.", num_coarsenings());
   1.103 +  // Strong code root stats
   1.104 +  out->print_cr("  Total heap region code-root set sizes = "SIZE_FORMAT"K."
   1.105 +                "  Max = "SIZE_FORMAT"K.",
   1.106 +                blk.total_code_root_mem_sz()/K, blk.max_code_root_mem_sz()/K);
   1.107 +  HeapRegion* max_code_root_mem_sz_region = blk.max_code_root_mem_sz_region();
   1.108 +  HeapRegionRemSet* max_code_root_rem_set = max_code_root_mem_sz_region->rem_set();
   1.109 +  out->print_cr("    Max size region = "HR_FORMAT", "
   1.110 +                "size = "SIZE_FORMAT "K, num_elems = "SIZE_FORMAT".",
   1.111 +                HR_FORMAT_PARAMS(max_code_root_mem_sz_region),
   1.112 +                (max_code_root_rem_set->strong_code_roots_mem_size() + K - 1)/K,
   1.113 +                (max_code_root_rem_set->strong_code_roots_list_length()));
   1.114  }

mercurial