< prev index next >

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

Print this page

        

*** 558,611 **** } void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm) { // First eliminated garbage regions from the coarse map. ! if (G1RSScrubVerbose) { ! gclog_or_tty->print_cr("Scrubbing region %u:", _hr->hrm_index()); ! } assert(_coarse_map.size() == region_bm->size(), "Precondition"); ! if (G1RSScrubVerbose) { ! gclog_or_tty->print(" Coarse map: before = " SIZE_FORMAT "...", ! _n_coarse_entries); ! } _coarse_map.set_intersection(*region_bm); _n_coarse_entries = _coarse_map.count_one_bits(); ! if (G1RSScrubVerbose) { ! gclog_or_tty->print_cr(" after = " SIZE_FORMAT ".", _n_coarse_entries); ! } // Now do the fine-grained maps. for (size_t i = 0; i < _max_fine_entries; i++) { PerRegionTable* cur = _fine_grain_regions[i]; PerRegionTable** prev = &_fine_grain_regions[i]; while (cur != NULL) { PerRegionTable* nxt = cur->collision_list_next(); // If the entire region is dead, eliminate. ! if (G1RSScrubVerbose) { ! gclog_or_tty->print_cr(" For other region %u:", ! cur->hr()->hrm_index()); ! } if (!region_bm->at((size_t) cur->hr()->hrm_index())) { *prev = nxt; cur->set_collision_list_next(NULL); _n_fine_entries--; ! if (G1RSScrubVerbose) { ! gclog_or_tty->print_cr(" deleted via region map."); ! } unlink_from_all(cur); PerRegionTable::free(cur); } else { // Do fine-grain elimination. ! if (G1RSScrubVerbose) { ! gclog_or_tty->print(" occ: before = %4d.", cur->occupied()); ! } cur->scrub(ctbs, card_bm); ! if (G1RSScrubVerbose) { ! gclog_or_tty->print_cr(" after = %4d.", cur->occupied()); ! } // Did that empty the table completely? if (cur->occupied() == 0) { *prev = nxt; cur->set_collision_list_next(NULL); _n_fine_entries--; --- 558,595 ---- } void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm) { // First eliminated garbage regions from the coarse map. ! log_develop(gc, remset, scrub)("Scrubbing region %u:", _hr->hrm_index()); assert(_coarse_map.size() == region_bm->size(), "Precondition"); ! log_develop(gc, remset, scrub)(" Coarse map: before = " SIZE_FORMAT "...", _n_coarse_entries); _coarse_map.set_intersection(*region_bm); _n_coarse_entries = _coarse_map.count_one_bits(); ! log_develop(gc, remset, scrub)(" after = " SIZE_FORMAT ".", _n_coarse_entries); // Now do the fine-grained maps. for (size_t i = 0; i < _max_fine_entries; i++) { PerRegionTable* cur = _fine_grain_regions[i]; PerRegionTable** prev = &_fine_grain_regions[i]; while (cur != NULL) { PerRegionTable* nxt = cur->collision_list_next(); // If the entire region is dead, eliminate. ! log_develop(gc, remset, scrub)(" For other region %u:", cur->hr()->hrm_index()); if (!region_bm->at((size_t) cur->hr()->hrm_index())) { *prev = nxt; cur->set_collision_list_next(NULL); _n_fine_entries--; ! log_develop(gc, remset, scrub)(" deleted via region map."); unlink_from_all(cur); PerRegionTable::free(cur); } else { // Do fine-grain elimination. ! log_develop(gc, remset, scrub)(" occ: before = %4d.", cur->occupied()); cur->scrub(ctbs, card_bm); ! log_develop(gc, remset, scrub)(" after = %4d.", cur->occupied()); // Did that empty the table completely? if (cur->occupied() == 0) { *prev = nxt; cur->set_collision_list_next(NULL); _n_fine_entries--;
*** 797,815 **** HeapRegionRemSetIterator iter(this); size_t card_index; while (iter.has_next(card_index)) { HeapWord* card_start = G1CollectedHeap::heap()->bot_shared()->address_for_index(card_index); ! gclog_or_tty->print_cr(" Card " PTR_FORMAT, p2i(card_start)); } if (iter.n_yielded() != occupied()) { ! gclog_or_tty->print_cr("Yielded disagrees with occupied:"); ! gclog_or_tty->print_cr(" " SIZE_FORMAT_W(6) " yielded (" SIZE_FORMAT_W(6) " coarse, " SIZE_FORMAT_W(6) " fine).", iter.n_yielded(), iter.n_yielded_coarse(), iter.n_yielded_fine()); ! gclog_or_tty->print_cr(" " SIZE_FORMAT_W(6) " occ (" SIZE_FORMAT_W(6) " coarse, " SIZE_FORMAT_W(6) " fine).", occupied(), occ_coarse(), occ_fine()); } guarantee(iter.n_yielded() == occupied(), "We should have yielded all the represented cards."); --- 781,799 ---- HeapRegionRemSetIterator iter(this); size_t card_index; while (iter.has_next(card_index)) { HeapWord* card_start = G1CollectedHeap::heap()->bot_shared()->address_for_index(card_index); ! tty->print_cr(" Card " PTR_FORMAT, p2i(card_start)); } if (iter.n_yielded() != occupied()) { ! tty->print_cr("Yielded disagrees with occupied:"); ! tty->print_cr(" " SIZE_FORMAT_W(6) " yielded (" SIZE_FORMAT_W(6) " coarse, " SIZE_FORMAT_W(6) " fine).", iter.n_yielded(), iter.n_yielded_coarse(), iter.n_yielded_fine()); ! tty->print_cr(" " SIZE_FORMAT_W(6) " occ (" SIZE_FORMAT_W(6) " coarse, " SIZE_FORMAT_W(6) " fine).", occupied(), occ_coarse(), occ_fine()); } guarantee(iter.n_yielded() == occupied(), "We should have yielded all the represented cards.");
*** 1087,1097 **** size_t sum = 0; size_t card_index; while (iter.has_next(card_index)) { HeapWord* card_start = G1CollectedHeap::heap()->bot_shared()->address_for_index(card_index); ! gclog_or_tty->print_cr(" Card " PTR_FORMAT ".", p2i(card_start)); sum++; } guarantee(sum == 11 - 3 + 2048, "Failure"); guarantee(sum == hrrs->occupied(), "Failure"); } --- 1071,1081 ---- size_t sum = 0; size_t card_index; while (iter.has_next(card_index)) { HeapWord* card_start = G1CollectedHeap::heap()->bot_shared()->address_for_index(card_index); ! tty->print_cr(" Card " PTR_FORMAT ".", p2i(card_start)); sum++; } guarantee(sum == 11 - 3 + 2048, "Failure"); guarantee(sum == hrrs->occupied(), "Failure"); }
< prev index next >