src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp
Print this page
rev 4654 : [mq]: 8013895
rev 4655 : [mq]: 8014078
*** 124,159 ****
_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) {
--- 124,245 ----
_sampling_thread_vtime = other->sampling_thread_vtime() - _sampling_thread_vtime;
}
class HRRSStatsIter: public HeapRegionClosure {
! private:
size_t _max_mem_sz;
HeapRegion* _max_mem_sz_region;
public:
+ struct region_type_counter_t {
+ private:
+ size_t _mem_size;
+ size_t _occupied;
+ size_t _amount;
+
+ static double percent_of(size_t* value, size_t total) {
+ if (total != 0) {
+ return ((double)*value / total) * 100.0f;
+ } else {
+ return 0.0f;
+ }
+ }
+
+ 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:
+
+ region_type_counter_t() : _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);
+ }
+ };
+
+ private:
+ region_type_counter_t _young;
+ region_type_counter_t _humonguous;
+ region_type_counter_t _free;
+ region_type_counter_t _other;
+ region_type_counter_t _all;
+
+ public:
HRRSStatsIter() :
! _max_mem_sz(0), _max_mem_sz_region(NULL),
! _all(), _young(), _humonguous(), _free(), _other()
{}
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 {
! _other.add(mem_sz, occ);
! }
!
return false;
}
!
! region_type_counter_t& young() {
! return _young;
! }
!
! region_type_counter_t& humonguous() {
! return _humonguous;
! }
!
! region_type_counter_t& free() {
! return _free;
! }
!
! region_type_counter_t& other() {
! return _other;
! }
!
! 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; }
};
double calc_percentage(size_t numerator, size_t denominator) {
if (denominator != 0) {
*** 185,200 ****
--- 271,294 ----
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);
+ blk.young().print_mem_info_on(out, blk.total_mem_sz(), "Young");
+ blk.humonguous().print_mem_info_on(out, blk.total_mem_sz(), "Humonguous");
+ blk.free().print_mem_info_on(out, blk.total_mem_sz(), "Free");
+ blk.other().print_mem_info_on(out, blk.total_mem_sz(), "Other");
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());
+ blk.young().print_occupied_info_on(out, blk.occupied(), "Young");
+ blk.humonguous().print_occupied_info_on(out, blk.occupied(), "Humonguous");
+ blk.free().print_occupied_info_on(out, blk.occupied(), "Free");
+ blk.other().print_occupied_info_on(out, blk.occupied(), "Other");
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),