704 |
704 |
705 size_t OtherRegionsTable::mem_size() const { |
705 size_t OtherRegionsTable::mem_size() const { |
706 // Cast away const in this case. |
706 // Cast away const in this case. |
707 MutexLockerEx x((Mutex*)&_m, Mutex::_no_safepoint_check_flag); |
707 MutexLockerEx x((Mutex*)&_m, Mutex::_no_safepoint_check_flag); |
708 size_t sum = 0; |
708 size_t sum = 0; |
709 PerRegionTable * cur = _first_all_fine_prts; |
709 // all PRTs are of the same size so it is sufficient to query only one of them. |
710 while (cur != NULL) { |
710 if (_first_all_fine_prts != NULL) { |
711 sum += cur->mem_size(); |
711 assert(_last_all_fine_prts != NULL && |
712 cur = cur->next(); |
712 _first_all_fine_prts->mem_size() == _last_all_fine_prts->mem_size(), "check that mem_size() is constant"); |
|
713 sum += _first_all_fine_prts->mem_size() * _n_fine_entries; |
713 } |
714 } |
714 sum += (sizeof(PerRegionTable*) * _max_fine_entries); |
715 sum += (sizeof(PerRegionTable*) * _max_fine_entries); |
715 sum += (_coarse_map.size_in_words() * HeapWordSize); |
716 sum += (_coarse_map.size_in_words() * HeapWordSize); |
716 sum += (_sparse_table.mem_size()); |
717 sum += (_sparse_table.mem_size()); |
717 sum += sizeof(*this) - sizeof(_sparse_table); // Avoid double counting above. |
718 sum += sizeof(*this) - sizeof(_sparse_table); // Avoid double counting above. |