< prev index next >

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

Print this page
rev 53862 : [mq]: java_attach_protocol
rev 53869 : [mq]: merge_attach


 177     {
 178       // Verify that the storage points to a parsable object in heap
 179       DEBUG_ONLY(oop old_obj = oop(deferred.start());)
 180       assert(!_card_table->is_in_young(old_obj),
 181              "Else should have been filtered in on_slowpath_allocation_exit()");
 182       assert(oopDesc::is_oop(old_obj, true), "Not an oop");
 183       assert(deferred.word_size() == (size_t)(old_obj->size()),
 184              "Mismatch: multiple objects?");
 185     }
 186     write_region(deferred);
 187     // "Clear" the deferred_card_mark field
 188     thread->set_deferred_card_mark(MemRegion());
 189   }
 190   assert(thread->deferred_card_mark().is_empty(), "invariant");
 191 #else
 192   assert(!_defer_initial_card_mark, "Should be false");
 193   assert(thread->deferred_card_mark().is_empty(), "Should be empty");
 194 #endif
 195 }
 196 
 197 void CardTableBarrierSet::on_thread_detach(JavaThread* thread) {
 198   // The deferred store barriers must all have been flushed to the
 199   // card-table (or other remembered set structure) before GC starts
 200   // processing the card-table (or other remembered set).
 201   flush_deferred_card_mark_barrier(thread);


 202 }
 203 
 204 bool CardTableBarrierSet::card_mark_must_follow_store() const {
 205  return _card_table->scanned_concurrently();
 206 }


 177     {
 178       // Verify that the storage points to a parsable object in heap
 179       DEBUG_ONLY(oop old_obj = oop(deferred.start());)
 180       assert(!_card_table->is_in_young(old_obj),
 181              "Else should have been filtered in on_slowpath_allocation_exit()");
 182       assert(oopDesc::is_oop(old_obj, true), "Not an oop");
 183       assert(deferred.word_size() == (size_t)(old_obj->size()),
 184              "Mismatch: multiple objects?");
 185     }
 186     write_region(deferred);
 187     // "Clear" the deferred_card_mark field
 188     thread->set_deferred_card_mark(MemRegion());
 189   }
 190   assert(thread->deferred_card_mark().is_empty(), "invariant");
 191 #else
 192   assert(!_defer_initial_card_mark, "Should be false");
 193   assert(thread->deferred_card_mark().is_empty(), "Should be empty");
 194 #endif
 195 }
 196 
 197 void CardTableBarrierSet::on_thread_detach(Thread* thread) {
 198   // The deferred store barriers must all have been flushed to the
 199   // card-table (or other remembered set structure) before GC starts
 200   // processing the card-table (or other remembered set).
 201   if (thread->is_Java_thread()) { // Only relevant for Java threads.
 202     flush_deferred_card_mark_barrier((JavaThread*)thread);
 203   }
 204 }
 205 
 206 bool CardTableBarrierSet::card_mark_must_follow_store() const {
 207  return _card_table->scanned_concurrently();
 208 }
< prev index next >