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

changeset 9327
f96fcd9e1e1b
parent 9046
4edb0f406a2c
child 9342
5792d995ed26
equal deleted inserted replaced
9324:efdbe9b904ad 9327:f96fcd9e1e1b
379 invalidate(0, _max_regions); 379 invalidate(0, _max_regions);
380 } 380 }
381 381
382 void FromCardCache::invalidate(uint start_idx, size_t new_num_regions) { 382 void FromCardCache::invalidate(uint start_idx, size_t new_num_regions) {
383 guarantee((size_t)start_idx + new_num_regions <= max_uintx, 383 guarantee((size_t)start_idx + new_num_regions <= max_uintx,
384 err_msg("Trying to invalidate beyond maximum region, from %u size "SIZE_FORMAT, 384 err_msg("Trying to invalidate beyond maximum region, from %u size " SIZE_FORMAT,
385 start_idx, new_num_regions)); 385 start_idx, new_num_regions));
386 for (uint i = 0; i < HeapRegionRemSet::num_par_rem_sets(); i++) { 386 for (uint i = 0; i < HeapRegionRemSet::num_par_rem_sets(); i++) {
387 uint end_idx = (start_idx + (uint)new_num_regions); 387 uint end_idx = (start_idx + (uint)new_num_regions);
388 assert(end_idx <= _max_regions, "Must be within max."); 388 assert(end_idx <= _max_regions, "Must be within max.");
389 for (uint j = start_idx; j < end_idx; j++) { 389 for (uint j = start_idx; j < end_idx; j++) {
648 gclog_or_tty->print_cr("Scrubbing region %u:", hr()->hrm_index()); 648 gclog_or_tty->print_cr("Scrubbing region %u:", hr()->hrm_index());
649 } 649 }
650 650
651 assert(_coarse_map.size() == region_bm->size(), "Precondition"); 651 assert(_coarse_map.size() == region_bm->size(), "Precondition");
652 if (G1RSScrubVerbose) { 652 if (G1RSScrubVerbose) {
653 gclog_or_tty->print(" Coarse map: before = "SIZE_FORMAT"...", 653 gclog_or_tty->print(" Coarse map: before = " SIZE_FORMAT "...",
654 _n_coarse_entries); 654 _n_coarse_entries);
655 } 655 }
656 _coarse_map.set_intersection(*region_bm); 656 _coarse_map.set_intersection(*region_bm);
657 _n_coarse_entries = _coarse_map.count_one_bits(); 657 _n_coarse_entries = _coarse_map.count_one_bits();
658 if (G1RSScrubVerbose) { 658 if (G1RSScrubVerbose) {
659 gclog_or_tty->print_cr(" after = "SIZE_FORMAT".", _n_coarse_entries); 659 gclog_or_tty->print_cr(" after = " SIZE_FORMAT ".", _n_coarse_entries);
660 } 660 }
661 661
662 // Now do the fine-grained maps. 662 // Now do the fine-grained maps.
663 for (size_t i = 0; i < _max_fine_entries; i++) { 663 for (size_t i = 0; i < _max_fine_entries; i++) {
664 PerRegionTable* cur = _fine_grain_regions[i]; 664 PerRegionTable* cur = _fine_grain_regions[i];
1050 _cur_card_in_prt = _fine_cur_prt->_bm.get_next_one_offset(_cur_card_in_prt + 1); 1050 _cur_card_in_prt = _fine_cur_prt->_bm.get_next_one_offset(_cur_card_in_prt + 1);
1051 } 1051 }
1052 1052
1053 card_index = _cur_region_card_offset + _cur_card_in_prt; 1053 card_index = _cur_region_card_offset + _cur_card_in_prt;
1054 guarantee(_cur_card_in_prt < HeapRegion::CardsPerRegion, 1054 guarantee(_cur_card_in_prt < HeapRegion::CardsPerRegion,
1055 err_msg("Card index "SIZE_FORMAT" must be within the region", _cur_card_in_prt)); 1055 err_msg("Card index " SIZE_FORMAT " must be within the region", _cur_card_in_prt));
1056 return true; 1056 return true;
1057 } 1057 }
1058 1058
1059 bool HeapRegionRemSetIterator::fine_has_next() { 1059 bool HeapRegionRemSetIterator::fine_has_next() {
1060 return _cur_card_in_prt != HeapRegion::CardsPerRegion; 1060 return _cur_card_in_prt != HeapRegion::CardsPerRegion;
1219 void PerRegionTable::test_fl_mem_size() { 1219 void PerRegionTable::test_fl_mem_size() {
1220 PerRegionTable* dummy = alloc(NULL); 1220 PerRegionTable* dummy = alloc(NULL);
1221 1221
1222 size_t min_prt_size = sizeof(void*) + dummy->bm()->size_in_words() * HeapWordSize; 1222 size_t min_prt_size = sizeof(void*) + dummy->bm()->size_in_words() * HeapWordSize;
1223 assert(dummy->mem_size() > min_prt_size, 1223 assert(dummy->mem_size() > min_prt_size,
1224 err_msg("PerRegionTable memory usage is suspiciously small, only has "SIZE_FORMAT" bytes. " 1224 err_msg("PerRegionTable memory usage is suspiciously small, only has " SIZE_FORMAT " bytes. "
1225 "Should be at least "SIZE_FORMAT" bytes.", dummy->mem_size(), min_prt_size)); 1225 "Should be at least " SIZE_FORMAT " bytes.", dummy->mem_size(), min_prt_size));
1226 free(dummy); 1226 free(dummy);
1227 guarantee(dummy->mem_size() == fl_mem_size(), "fl_mem_size() does not return the correct element size"); 1227 guarantee(dummy->mem_size() == fl_mem_size(), "fl_mem_size() does not return the correct element size");
1228 // try to reset the state 1228 // try to reset the state
1229 _free_list = NULL; 1229 _free_list = NULL;
1230 delete dummy; 1230 delete dummy;

mercurial