< prev index next >

src/hotspot/share/gc/g1/g1RemSet.cpp

Print this page

        

*** 584,593 **** --- 584,607 ---- // we see the up-to-date region type here. if (!r->is_old_or_humongous()) { return; } + // While we are processing RSet buffers during the collection, we + // actually don't want to scan any cards on the collection set, + // since we don't want to update remembered sets with entries that + // point into the collection set, given that live objects from the + // collection set are about to move and such entries will be stale + // very soon. This change also deals with a reliability issue which + // involves scanning a card in the collection set and coming across + // an array that was being chunked and looking malformed. Note, + // however, that if evacuation fails, we have to scan any objects + // that were not moved and create any missing entries. + if (r->in_collection_set()) { + return; + } + // The result from the hot card cache insert call is either: // * pointer to the current card // (implying that the current card is not 'hot'), // * null // (meaning we had inserted the card ptr into the "hot" card cache,
*** 608,618 **** start = _ct_bs->addr_for(card_ptr); r = _g1->heap_region_containing(start); // Check whether the region formerly in the cache should be // ignored, as discussed earlier for the original card. The ! // region could have been freed while in the cache. if (!r->is_old_or_humongous()) { return; } } // Else we still have the original card. } --- 622,633 ---- start = _ct_bs->addr_for(card_ptr); r = _g1->heap_region_containing(start); // Check whether the region formerly in the cache should be // ignored, as discussed earlier for the original card. The ! // region could have been freed while in the cache. The cset is ! // not relevant here, since we're in concurrent phase. if (!r->is_old_or_humongous()) { return; } } // Else we still have the original card. }
< prev index next >