hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
changeset 28835 2e467a95d04c
parent 28478 b3a2d4115e0d
child 29078 3b7dd035c20b
equal deleted inserted replaced
28834:4925a7f447b0 28835:2e467a95d04c
  3523         G1SATBCardTableLoggingModRefBS* bs = g1h->g1_barrier_set();
  3523         G1SATBCardTableLoggingModRefBS* bs = g1h->g1_barrier_set();
  3524         HeapRegionRemSetIterator hrrs(r->rem_set());
  3524         HeapRegionRemSetIterator hrrs(r->rem_set());
  3525         size_t card_index;
  3525         size_t card_index;
  3526         while (hrrs.has_next(card_index)) {
  3526         while (hrrs.has_next(card_index)) {
  3527           jbyte* card_ptr = (jbyte*)bs->byte_for_index(card_index);
  3527           jbyte* card_ptr = (jbyte*)bs->byte_for_index(card_index);
  3528           if (*card_ptr != CardTableModRefBS::dirty_card_val()) {
  3528           // The remembered set might contain references to already freed
  3529             *card_ptr = CardTableModRefBS::dirty_card_val();
  3529           // regions. Filter out such entries to avoid failing card table
  3530             _dcq.enqueue(card_ptr);
  3530           // verification.
       
  3531           if (!g1h->heap_region_containing(bs->addr_for(card_ptr))->is_free()) {
       
  3532             if (*card_ptr != CardTableModRefBS::dirty_card_val()) {
       
  3533               *card_ptr = CardTableModRefBS::dirty_card_val();
       
  3534               _dcq.enqueue(card_ptr);
       
  3535             }
  3531           }
  3536           }
  3532         }
  3537         }
  3533         r->rem_set()->clear_locked();
  3538         r->rem_set()->clear_locked();
  3534       }
  3539       }
  3535       assert(r->rem_set()->is_empty(), "At this point any humongous candidate remembered set must be empty.");
  3540       assert(r->rem_set()->is_empty(), "At this point any humongous candidate remembered set must be empty.");