< prev index next >

src/hotspot/share/gc/shared/cardTableModRefBS.cpp

Print this page




 610     {
 611       // Verify that the storage points to a parsable object in heap
 612       DEBUG_ONLY(oop old_obj = oop(deferred.start());)
 613       assert(!is_in_young(old_obj),
 614              "Else should have been filtered in on_slowpath_allocation_exit()");
 615       assert(oopDesc::is_oop(old_obj, true), "Not an oop");
 616       assert(deferred.word_size() == (size_t)(old_obj->size()),
 617              "Mismatch: multiple objects?");
 618     }
 619     write_region(deferred);
 620     // "Clear" the deferred_card_mark field
 621     thread->set_deferred_card_mark(MemRegion());
 622   }
 623   assert(thread->deferred_card_mark().is_empty(), "invariant");
 624 #else
 625   assert(!_defer_initial_card_mark, "Should be false");
 626   assert(thread->deferred_card_mark().is_empty(), "Should be empty");
 627 #endif
 628 }
 629 
 630 void CardTableModRefBS::flush_deferred_barriers(JavaThread* thread) {
 631   // The deferred store barriers must all have been flushed to the
 632   // card-table (or other remembered set structure) before GC starts
 633   // processing the card-table (or other remembered set).
 634   flush_deferred_card_mark_barrier(thread);
 635 }


 610     {
 611       // Verify that the storage points to a parsable object in heap
 612       DEBUG_ONLY(oop old_obj = oop(deferred.start());)
 613       assert(!is_in_young(old_obj),
 614              "Else should have been filtered in on_slowpath_allocation_exit()");
 615       assert(oopDesc::is_oop(old_obj, true), "Not an oop");
 616       assert(deferred.word_size() == (size_t)(old_obj->size()),
 617              "Mismatch: multiple objects?");
 618     }
 619     write_region(deferred);
 620     // "Clear" the deferred_card_mark field
 621     thread->set_deferred_card_mark(MemRegion());
 622   }
 623   assert(thread->deferred_card_mark().is_empty(), "invariant");
 624 #else
 625   assert(!_defer_initial_card_mark, "Should be false");
 626   assert(thread->deferred_card_mark().is_empty(), "Should be empty");
 627 #endif
 628 }
 629 
 630 void CardTableModRefBS::on_thread_destroy(JavaThread* thread) {
 631   // The deferred store barriers must all have been flushed to the
 632   // card-table (or other remembered set structure) before GC starts
 633   // processing the card-table (or other remembered set).
 634   flush_deferred_card_mark_barrier(thread);
 635 }
< prev index next >