1.1 --- a/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Mon Jul 21 09:40:19 2014 +0200 1.2 +++ b/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Mon Jul 21 09:40:19 2014 +0200 1.3 @@ -169,7 +169,7 @@ 1.4 1.5 // Mem size in bytes. 1.6 size_t mem_size() const { 1.7 - return sizeof(this) + _bm.size_in_words() * HeapWordSize; 1.8 + return sizeof(PerRegionTable) + _bm.size_in_words() * HeapWordSize; 1.9 } 1.10 1.11 // Requires "from" to be in "hr()". 1.12 @@ -735,7 +735,7 @@ 1.13 sum += (sizeof(PerRegionTable*) * _max_fine_entries); 1.14 sum += (_coarse_map.size_in_words() * HeapWordSize); 1.15 sum += (_sparse_table.mem_size()); 1.16 - sum += sizeof(*this) - sizeof(_sparse_table); // Avoid double counting above. 1.17 + sum += sizeof(OtherRegionsTable) - sizeof(_sparse_table); // Avoid double counting above. 1.18 return sum; 1.19 } 1.20 1.21 @@ -1249,6 +1249,11 @@ 1.22 #ifndef PRODUCT 1.23 void PerRegionTable::test_fl_mem_size() { 1.24 PerRegionTable* dummy = alloc(NULL); 1.25 + 1.26 + size_t min_prt_size = sizeof(void*) + dummy->bm()->size_in_words() * HeapWordSize; 1.27 + assert(dummy->mem_size() > min_prt_size, 1.28 + err_msg("PerRegionTable memory usage is suspiciously small, only has "SIZE_FORMAT" bytes. " 1.29 + "Should be at least "SIZE_FORMAT" bytes.", dummy->mem_size(), min_prt_size)); 1.30 free(dummy); 1.31 guarantee(dummy->mem_size() == fl_mem_size(), "fl_mem_size() does not return the correct element size"); 1.32 // try to reset the state