hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp
changeset 19339 d247781beec7
parent 17854 d65bc1546091
child 20305 af013cf4a5e6
equal deleted inserted replaced
19289:213031f03f61 19339:d247781beec7
   125   _sampling_thread_vtime = other->sampling_thread_vtime() - _sampling_thread_vtime;
   125   _sampling_thread_vtime = other->sampling_thread_vtime() - _sampling_thread_vtime;
   126 }
   126 }
   127 
   127 
   128 class HRRSStatsIter: public HeapRegionClosure {
   128 class HRRSStatsIter: public HeapRegionClosure {
   129   size_t _occupied;
   129   size_t _occupied;
   130   size_t _total_mem_sz;
   130 
   131   size_t _max_mem_sz;
   131   size_t _total_rs_mem_sz;
   132   HeapRegion* _max_mem_sz_region;
   132   size_t _max_rs_mem_sz;
       
   133   HeapRegion* _max_rs_mem_sz_region;
       
   134 
       
   135   size_t _total_code_root_mem_sz;
       
   136   size_t _max_code_root_mem_sz;
       
   137   HeapRegion* _max_code_root_mem_sz_region;
   133 public:
   138 public:
   134   HRRSStatsIter() :
   139   HRRSStatsIter() :
   135     _occupied(0),
   140     _occupied(0),
   136     _total_mem_sz(0),
   141     _total_rs_mem_sz(0),
   137     _max_mem_sz(0),
   142     _max_rs_mem_sz(0),
   138     _max_mem_sz_region(NULL)
   143     _max_rs_mem_sz_region(NULL),
       
   144     _total_code_root_mem_sz(0),
       
   145     _max_code_root_mem_sz(0),
       
   146     _max_code_root_mem_sz_region(NULL)
   139   {}
   147   {}
   140 
   148 
   141   bool doHeapRegion(HeapRegion* r) {
   149   bool doHeapRegion(HeapRegion* r) {
   142     size_t mem_sz = r->rem_set()->mem_size();
   150     HeapRegionRemSet* hrrs = r->rem_set();
   143     if (mem_sz > _max_mem_sz) {
   151 
   144       _max_mem_sz = mem_sz;
   152     // HeapRegionRemSet::mem_size() includes the
   145       _max_mem_sz_region = r;
   153     // size of the strong code roots
       
   154     size_t rs_mem_sz = hrrs->mem_size();
       
   155     if (rs_mem_sz > _max_rs_mem_sz) {
       
   156       _max_rs_mem_sz = rs_mem_sz;
       
   157       _max_rs_mem_sz_region = r;
   146     }
   158     }
   147     _total_mem_sz += mem_sz;
   159     _total_rs_mem_sz += rs_mem_sz;
   148     size_t occ = r->rem_set()->occupied();
   160 
       
   161     size_t code_root_mem_sz = hrrs->strong_code_roots_mem_size();
       
   162     if (code_root_mem_sz > _max_code_root_mem_sz) {
       
   163       _max_code_root_mem_sz = code_root_mem_sz;
       
   164       _max_code_root_mem_sz_region = r;
       
   165     }
       
   166     _total_code_root_mem_sz += code_root_mem_sz;
       
   167 
       
   168     size_t occ = hrrs->occupied();
   149     _occupied += occ;
   169     _occupied += occ;
   150     return false;
   170     return false;
   151   }
   171   }
   152   size_t total_mem_sz() { return _total_mem_sz; }
   172   size_t total_rs_mem_sz() { return _total_rs_mem_sz; }
   153   size_t max_mem_sz() { return _max_mem_sz; }
   173   size_t max_rs_mem_sz() { return _max_rs_mem_sz; }
       
   174   HeapRegion* max_rs_mem_sz_region() { return _max_rs_mem_sz_region; }
       
   175   size_t total_code_root_mem_sz() { return _total_code_root_mem_sz; }
       
   176   size_t max_code_root_mem_sz() { return _max_code_root_mem_sz; }
       
   177   HeapRegion* max_code_root_mem_sz_region() { return _max_code_root_mem_sz_region; }
   154   size_t occupied() { return _occupied; }
   178   size_t occupied() { return _occupied; }
   155   HeapRegion* max_mem_sz_region() { return _max_mem_sz_region; }
       
   156 };
   179 };
   157 
   180 
   158 double calc_percentage(size_t numerator, size_t denominator) {
   181 double calc_percentage(size_t numerator, size_t denominator) {
   159   if (denominator != 0) {
   182   if (denominator != 0) {
   160     return (double)numerator / denominator * 100.0;
   183     return (double)numerator / denominator * 100.0;
   182   out->print_cr("  Concurrent sampling threads times (s)");
   205   out->print_cr("  Concurrent sampling threads times (s)");
   183   out->print_cr("         %5.2f", sampling_thread_vtime());
   206   out->print_cr("         %5.2f", sampling_thread_vtime());
   184 
   207 
   185   HRRSStatsIter blk;
   208   HRRSStatsIter blk;
   186   G1CollectedHeap::heap()->heap_region_iterate(&blk);
   209   G1CollectedHeap::heap()->heap_region_iterate(&blk);
       
   210   // RemSet stats
   187   out->print_cr("  Total heap region rem set sizes = "SIZE_FORMAT"K."
   211   out->print_cr("  Total heap region rem set sizes = "SIZE_FORMAT"K."
   188                 "  Max = "SIZE_FORMAT"K.",
   212                 "  Max = "SIZE_FORMAT"K.",
   189                 blk.total_mem_sz()/K, blk.max_mem_sz()/K);
   213                 blk.total_rs_mem_sz()/K, blk.max_rs_mem_sz()/K);
   190   out->print_cr("  Static structures = "SIZE_FORMAT"K,"
   214   out->print_cr("  Static structures = "SIZE_FORMAT"K,"
   191                 " free_lists = "SIZE_FORMAT"K.",
   215                 " free_lists = "SIZE_FORMAT"K.",
   192                 HeapRegionRemSet::static_mem_size() / K,
   216                 HeapRegionRemSet::static_mem_size() / K,
   193                 HeapRegionRemSet::fl_mem_size() / K);
   217                 HeapRegionRemSet::fl_mem_size() / K);
   194   out->print_cr("    "SIZE_FORMAT" occupied cards represented.",
   218   out->print_cr("    "SIZE_FORMAT" occupied cards represented.",
   195                 blk.occupied());
   219                 blk.occupied());
   196   HeapRegion* max_mem_sz_region = blk.max_mem_sz_region();
   220   HeapRegion* max_rs_mem_sz_region = blk.max_rs_mem_sz_region();
   197   HeapRegionRemSet* rem_set = max_mem_sz_region->rem_set();
   221   HeapRegionRemSet* max_rs_rem_set = max_rs_mem_sz_region->rem_set();
   198   out->print_cr("    Max size region = "HR_FORMAT", "
   222   out->print_cr("    Max size region = "HR_FORMAT", "
   199                 "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
   223                 "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
   200                 HR_FORMAT_PARAMS(max_mem_sz_region),
   224                 HR_FORMAT_PARAMS(max_rs_mem_sz_region),
   201                 (rem_set->mem_size() + K - 1)/K,
   225                 (max_rs_rem_set->mem_size() + K - 1)/K,
   202                 (rem_set->occupied() + K - 1)/K);
   226                 (max_rs_rem_set->occupied() + K - 1)/K);
   203 
       
   204   out->print_cr("    Did %d coarsenings.", num_coarsenings());
   227   out->print_cr("    Did %d coarsenings.", num_coarsenings());
   205 }
   228   // Strong code root stats
       
   229   out->print_cr("  Total heap region code-root set sizes = "SIZE_FORMAT"K."
       
   230                 "  Max = "SIZE_FORMAT"K.",
       
   231                 blk.total_code_root_mem_sz()/K, blk.max_code_root_mem_sz()/K);
       
   232   HeapRegion* max_code_root_mem_sz_region = blk.max_code_root_mem_sz_region();
       
   233   HeapRegionRemSet* max_code_root_rem_set = max_code_root_mem_sz_region->rem_set();
       
   234   out->print_cr("    Max size region = "HR_FORMAT", "
       
   235                 "size = "SIZE_FORMAT "K, num_elems = "SIZE_FORMAT".",
       
   236                 HR_FORMAT_PARAMS(max_code_root_mem_sz_region),
       
   237                 (max_code_root_rem_set->strong_code_roots_mem_size() + K - 1)/K,
       
   238                 (max_code_root_rem_set->strong_code_roots_list_length()));
       
   239 }