167 bm->set_union(_bm); |
167 bm->set_union(_bm); |
168 } |
168 } |
169 |
169 |
170 // Mem size in bytes. |
170 // Mem size in bytes. |
171 size_t mem_size() const { |
171 size_t mem_size() const { |
172 return sizeof(this) + _bm.size_in_words() * HeapWordSize; |
172 return sizeof(PerRegionTable) + _bm.size_in_words() * HeapWordSize; |
173 } |
173 } |
174 |
174 |
175 // Requires "from" to be in "hr()". |
175 // Requires "from" to be in "hr()". |
176 bool contains_reference(OopOrNarrowOopStar from) const { |
176 bool contains_reference(OopOrNarrowOopStar from) const { |
177 assert(hr()->is_in_reserved(from), "Precondition."); |
177 assert(hr()->is_in_reserved(from), "Precondition."); |
733 sum += _first_all_fine_prts->mem_size() * _n_fine_entries; |
733 sum += _first_all_fine_prts->mem_size() * _n_fine_entries; |
734 } |
734 } |
735 sum += (sizeof(PerRegionTable*) * _max_fine_entries); |
735 sum += (sizeof(PerRegionTable*) * _max_fine_entries); |
736 sum += (_coarse_map.size_in_words() * HeapWordSize); |
736 sum += (_coarse_map.size_in_words() * HeapWordSize); |
737 sum += (_sparse_table.mem_size()); |
737 sum += (_sparse_table.mem_size()); |
738 sum += sizeof(*this) - sizeof(_sparse_table); // Avoid double counting above. |
738 sum += sizeof(OtherRegionsTable) - sizeof(_sparse_table); // Avoid double counting above. |
739 return sum; |
739 return sum; |
740 } |
740 } |
741 |
741 |
742 size_t OtherRegionsTable::static_mem_size() { |
742 size_t OtherRegionsTable::static_mem_size() { |
743 return FromCardCache::static_mem_size(); |
743 return FromCardCache::static_mem_size(); |
1247 } |
1247 } |
1248 |
1248 |
1249 #ifndef PRODUCT |
1249 #ifndef PRODUCT |
1250 void PerRegionTable::test_fl_mem_size() { |
1250 void PerRegionTable::test_fl_mem_size() { |
1251 PerRegionTable* dummy = alloc(NULL); |
1251 PerRegionTable* dummy = alloc(NULL); |
|
1252 |
|
1253 size_t min_prt_size = sizeof(void*) + dummy->bm()->size_in_words() * HeapWordSize; |
|
1254 assert(dummy->mem_size() > min_prt_size, |
|
1255 err_msg("PerRegionTable memory usage is suspiciously small, only has "SIZE_FORMAT" bytes. " |
|
1256 "Should be at least "SIZE_FORMAT" bytes.", dummy->mem_size(), min_prt_size)); |
1252 free(dummy); |
1257 free(dummy); |
1253 guarantee(dummy->mem_size() == fl_mem_size(), "fl_mem_size() does not return the correct element size"); |
1258 guarantee(dummy->mem_size() == fl_mem_size(), "fl_mem_size() does not return the correct element size"); |
1254 // try to reset the state |
1259 // try to reset the state |
1255 _free_list = NULL; |
1260 _free_list = NULL; |
1256 delete dummy; |
1261 delete dummy; |