src/hotspot/share/gc/g1/g1RemSet.cpp
changeset 48954 c8a33db795b6
parent 48950 f323537c9b75
parent 48778 808555a54e9c
child 48955 e22914003cf0
equal deleted inserted replaced
48953:67aa88701d46 48954:c8a33db795b6
   584   // we see the up-to-date region type here.
   584   // we see the up-to-date region type here.
   585   if (!r->is_old_or_humongous()) {
   585   if (!r->is_old_or_humongous()) {
   586     return;
   586     return;
   587   }
   587   }
   588 
   588 
   589   // While we are processing RSet buffers during the collection, we
       
   590   // actually don't want to scan any cards on the collection set,
       
   591   // since we don't want to update remembered sets with entries that
       
   592   // point into the collection set, given that live objects from the
       
   593   // collection set are about to move and such entries will be stale
       
   594   // very soon. This change also deals with a reliability issue which
       
   595   // involves scanning a card in the collection set and coming across
       
   596   // an array that was being chunked and looking malformed. Note,
       
   597   // however, that if evacuation fails, we have to scan any objects
       
   598   // that were not moved and create any missing entries.
       
   599   if (r->in_collection_set()) {
       
   600     return;
       
   601   }
       
   602 
       
   603   // The result from the hot card cache insert call is either:
   589   // The result from the hot card cache insert call is either:
   604   //   * pointer to the current card
   590   //   * pointer to the current card
   605   //     (implying that the current card is not 'hot'),
   591   //     (implying that the current card is not 'hot'),
   606   //   * null
   592   //   * null
   607   //     (meaning we had inserted the card ptr into the "hot" card cache,
   593   //     (meaning we had inserted the card ptr into the "hot" card cache,
   622       start = _ct_bs->addr_for(card_ptr);
   608       start = _ct_bs->addr_for(card_ptr);
   623       r = _g1->heap_region_containing(start);
   609       r = _g1->heap_region_containing(start);
   624 
   610 
   625       // Check whether the region formerly in the cache should be
   611       // Check whether the region formerly in the cache should be
   626       // ignored, as discussed earlier for the original card.  The
   612       // ignored, as discussed earlier for the original card.  The
   627       // region could have been freed while in the cache.  The cset is
   613       // region could have been freed while in the cache.
   628       // not relevant here, since we're in concurrent phase.
       
   629       if (!r->is_old_or_humongous()) {
   614       if (!r->is_old_or_humongous()) {
   630         return;
   615         return;
   631       }
   616       }
   632     } // Else we still have the original card.
   617     } // Else we still have the original card.
   633   }
   618   }