コード例 #1
0
 template <class T> void do_oop_work(T* p) {
   oop obj = oopDesc::load_decode_heap_oop(p);
   if (_g1->obj_in_cs(obj)) {
     size_t card_index = _ct_bs->index_for(p);
     if (_ct_bs->mark_card_deferred(card_index)) {
       _dcq->enqueue((jbyte*)_ct_bs->byte_for_index(card_index));
     }
   }
 }
コード例 #2
0
 void do_oop_work(T* p) {
   _work->do_oop(p);
   T oop_or_narrowoop = oopDesc::load_heap_oop(p);
   if (!oopDesc::is_null(oop_or_narrowoop)) {
     oop o = oopDesc::decode_heap_oop_not_null(oop_or_narrowoop);
     HeapRegion* hr = _g1h->heap_region_containing_raw(o);
     assert(!_g1h->obj_in_cs(o) || hr->rem_set()->strong_code_roots_list_contains(_nm), "if o still in CS then evacuation failed and nm must already be in the remset");
     hr->add_strong_code_root(_nm);
   }
 }
コード例 #3
0
 template <class T> void do_oop_work(T* p) {
   oop obj = oopDesc::load_decode_heap_oop(p);
   if (_g1->obj_in_cs(obj)) _blk->do_oop(p);
 }