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

Print this page

        

*** 123,180 **** } _sampling_thread_vtime = other->sampling_thread_vtime() - _sampling_thread_vtime; } ! class HRRSStatsIter: public HeapRegionClosure { size_t _occupied; ! size_t _total_mem_sz; size_t _max_mem_sz; HeapRegion* _max_mem_sz_region; public: ! HRRSStatsIter() : ! _occupied(0), ! _total_mem_sz(0), ! _max_mem_sz(0), ! _max_mem_sz_region(NULL) {} bool doHeapRegion(HeapRegion* r) { size_t mem_sz = r->rem_set()->mem_size(); if (mem_sz > _max_mem_sz) { _max_mem_sz = mem_sz; _max_mem_sz_region = r; } - _total_mem_sz += mem_sz; size_t occ = r->rem_set()->occupied(); ! _occupied += occ; return false; } - size_t total_mem_sz() { return _total_mem_sz; } - size_t max_mem_sz() { return _max_mem_sz; } - size_t occupied() { return _occupied; } - HeapRegion* max_mem_sz_region() { return _max_mem_sz_region; } - }; ! double calc_percentage(size_t numerator, size_t denominator) { ! if (denominator != 0) { ! return (double)numerator / denominator * 100.0; ! } else { ! return 0.0f; } ! } void G1RemSetSummary::print_on(outputStream* out) { out->print_cr("\n Concurrent RS processed "SIZE_FORMAT" cards", num_concurrent_refined_cards()); out->print_cr(" Of %d completed buffers:", num_processed_buf_total()); out->print_cr(" %8d (%5.1f%%) by concurrent RS threads.", num_processed_buf_total(), ! calc_percentage(num_processed_buf_rs_threads(), num_processed_buf_total())); out->print_cr(" %8d (%5.1f%%) by mutator threads.", num_processed_buf_mutator(), ! calc_percentage(num_processed_buf_mutator(), num_processed_buf_total())); out->print_cr(" Concurrent RS threads times (s)"); out->print(" "); for (uint i = 0; i < _num_vtimes; i++) { out->print(" %5.2f", rs_thread_vtime(i)); } --- 123,261 ---- } _sampling_thread_vtime = other->sampling_thread_vtime() - _sampling_thread_vtime; } ! double percent_of(size_t numerator, size_t denominator) { ! if (denominator != 0) { ! return (double)numerator / denominator * 100.0f; ! } else { ! return 0.0f; ! } ! } ! ! class RegionTypeCounter VALUE_OBJ_CLASS_SPEC { ! private: ! size_t _mem_size; size_t _occupied; ! size_t _amount; ! ! double mem_size_percent_of(size_t total) { ! return percent_of(_mem_size, total); ! } ! ! double occupied_percent_of(size_t total) { ! return percent_of(_occupied, total); ! } ! ! size_t amount() const { return _amount; } ! ! public: ! ! RegionTypeCounter() : _mem_size(0), _occupied(0), _amount(0) { } ! ! void add(size_t mem_size, size_t occupied) { ! _mem_size += mem_size; ! _occupied += occupied; ! _amount++; ! } ! ! size_t mem_size() const { return _mem_size; } ! size_t occupied() const { return _occupied; } ! ! void print_mem_info_on(outputStream * out, size_t total, char const * type) { ! out->print_cr(" %8dK (%5.1f%%) by %zd %s regions", mem_size()/K, mem_size_percent_of(total), amount(), type); ! } ! ! void print_occupied_info_on(outputStream * out, size_t total, char const * type) { ! out->print_cr(" %8d (%5.1f%%) entries by %zd %s regions", occupied(), occupied_percent_of(total), amount(), type); ! } ! }; ! ! ! class HRRSStatsIter: public HeapRegionClosure { ! private: size_t _max_mem_sz; HeapRegion* _max_mem_sz_region; + + RegionTypeCounter _young; + RegionTypeCounter _humonguous; + RegionTypeCounter _free; + RegionTypeCounter _old; + RegionTypeCounter _all; + + size_t total_mem_sz() { return _all.mem_size(); } + size_t max_mem_sz() { return _max_mem_sz; } + size_t occupied() { return _all.occupied(); } + HeapRegion* max_mem_sz_region() { return _max_mem_sz_region; } + public: ! HRRSStatsIter() : _max_mem_sz(0), _max_mem_sz_region(NULL), ! _all(), _young(), _humonguous(), _free(), _old() {} bool doHeapRegion(HeapRegion* r) { size_t mem_sz = r->rem_set()->mem_size(); if (mem_sz > _max_mem_sz) { _max_mem_sz = mem_sz; _max_mem_sz_region = r; } size_t occ = r->rem_set()->occupied(); ! ! _all.add(mem_sz, occ); ! if (r->is_young()) { ! _young.add(mem_sz, occ); ! } else if (r->isHumongous()) { ! _humonguous.add(mem_sz, occ); ! } else if (r->is_empty()) { ! _free.add(mem_sz, occ); ! } else { ! _old.add(mem_sz, occ); ! } ! return false; } ! void print_summary_on(outputStream* out) { ! out->print_cr(" Total heap region rem set sizes = "SIZE_FORMAT"K." ! " Max = "SIZE_FORMAT"K.", ! total_mem_sz() / K, max_mem_sz() / K); ! _young.print_mem_info_on(out, total_mem_sz(), "Young"); ! _humonguous.print_mem_info_on(out, total_mem_sz(), "Humonguous"); ! _free.print_mem_info_on(out, total_mem_sz(), "Free"); ! _old.print_mem_info_on(out, total_mem_sz(), "Old"); ! out->print_cr(" Static structures = "SIZE_FORMAT"K," ! " free_lists = "SIZE_FORMAT"K.", ! HeapRegionRemSet::static_mem_size() / K, ! HeapRegionRemSet::fl_mem_size() / K); ! ! out->print_cr(" "SIZE_FORMAT" occupied cards represented.", ! occupied()); ! _young.print_occupied_info_on(out, occupied(), "Young"); ! _humonguous.print_occupied_info_on(out, occupied(), "Humonguous"); ! _free.print_occupied_info_on(out, occupied(), "Free"); ! _old.print_occupied_info_on(out, occupied(), "Old"); ! ! HeapRegionRemSet* rem_set = max_mem_sz_region()->rem_set(); ! out->print_cr(" Max size region = "HR_FORMAT", " ! "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.", ! HR_FORMAT_PARAMS(max_mem_sz_region()), ! (rem_set->mem_size() + K - 1) / K, ! (rem_set->occupied() + K - 1) / K); } ! }; void G1RemSetSummary::print_on(outputStream* out) { out->print_cr("\n Concurrent RS processed "SIZE_FORMAT" cards", num_concurrent_refined_cards()); out->print_cr(" Of %d completed buffers:", num_processed_buf_total()); out->print_cr(" %8d (%5.1f%%) by concurrent RS threads.", num_processed_buf_total(), ! percent_of(num_processed_buf_rs_threads(), num_processed_buf_total())); out->print_cr(" %8d (%5.1f%%) by mutator threads.", num_processed_buf_mutator(), ! percent_of(num_processed_buf_mutator(), num_processed_buf_total())); out->print_cr(" Concurrent RS threads times (s)"); out->print(" "); for (uint i = 0; i < _num_vtimes; i++) { out->print(" %5.2f", rs_thread_vtime(i)); }
*** 182,205 **** out->print_cr(" Concurrent sampling threads times (s)"); out->print_cr(" %5.2f", sampling_thread_vtime()); HRRSStatsIter blk; G1CollectedHeap::heap()->heap_region_iterate(&blk); ! out->print_cr(" Total heap region rem set sizes = "SIZE_FORMAT"K." ! " Max = "SIZE_FORMAT"K.", ! blk.total_mem_sz()/K, blk.max_mem_sz()/K); ! out->print_cr(" Static structures = "SIZE_FORMAT"K," ! " free_lists = "SIZE_FORMAT"K.", ! HeapRegionRemSet::static_mem_size() / K, ! HeapRegionRemSet::fl_mem_size() / K); ! out->print_cr(" "SIZE_FORMAT" occupied cards represented.", ! blk.occupied()); ! HeapRegion* max_mem_sz_region = blk.max_mem_sz_region(); ! HeapRegionRemSet* rem_set = max_mem_sz_region->rem_set(); ! out->print_cr(" Max size region = "HR_FORMAT", " ! "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.", ! HR_FORMAT_PARAMS(max_mem_sz_region), ! (rem_set->mem_size() + K - 1)/K, ! (rem_set->occupied() + K - 1)/K); out->print_cr(" Did %d coarsenings.", num_coarsenings()); } --- 263,271 ---- out->print_cr(" Concurrent sampling threads times (s)"); out->print_cr(" %5.2f", sampling_thread_vtime()); HRRSStatsIter blk; G1CollectedHeap::heap()->heap_region_iterate(&blk); ! blk.print_summary_on(out); out->print_cr(" Did %d coarsenings.", num_coarsenings()); }