< prev index next >

src/share/vm/gc_implementation/g1/g1RemSet.inline.hpp

Print this page
rev 8069 : imported patch g1_cleanup


  40 }
  41 
  42 template <class T>
  43 inline void G1RemSet::par_write_ref(HeapRegion* from, T* p, uint tid) {
  44   oop obj = oopDesc::load_decode_heap_oop(p);
  45   if (obj == NULL) {
  46     return;
  47   }
  48 
  49 #ifdef ASSERT
  50   // can't do because of races
  51   // assert(obj == NULL || obj->is_oop(), "expected an oop");
  52 
  53   // Do the safe subset of is_oop
  54 #ifdef CHECK_UNHANDLED_OOPS
  55   oopDesc* o = obj.obj();
  56 #else
  57   oopDesc* o = obj;
  58 #endif // CHECK_UNHANDLED_OOPS
  59   assert((intptr_t)o % MinObjAlignmentInBytes == 0, "not oop aligned");
  60   assert(Universe::heap()->is_in_reserved(obj), "must be in heap");
  61 #endif // ASSERT
  62 
  63   assert(from == NULL || from->is_in_reserved(p), "p is not in from");
  64 
  65   HeapRegion* to = _g1->heap_region_containing(obj);
  66   if (from != to) {
  67     assert(to->rem_set() != NULL, "Need per-region 'into' remsets.");
  68     to->rem_set()->add_reference(p, tid);
  69   }
  70 }
  71 
  72 template <class T>
  73 inline void UpdateRSOopClosure::do_oop_work(T* p) {
  74   assert(_from != NULL, "from region must be non-NULL");
  75   _rs->par_write_ref(_from, p, _worker_i);
  76 }
  77 
  78 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_INLINE_HPP


  40 }
  41 
  42 template <class T>
  43 inline void G1RemSet::par_write_ref(HeapRegion* from, T* p, uint tid) {
  44   oop obj = oopDesc::load_decode_heap_oop(p);
  45   if (obj == NULL) {
  46     return;
  47   }
  48 
  49 #ifdef ASSERT
  50   // can't do because of races
  51   // assert(obj == NULL || obj->is_oop(), "expected an oop");
  52 
  53   // Do the safe subset of is_oop
  54 #ifdef CHECK_UNHANDLED_OOPS
  55   oopDesc* o = obj.obj();
  56 #else
  57   oopDesc* o = obj;
  58 #endif // CHECK_UNHANDLED_OOPS
  59   assert((intptr_t)o % MinObjAlignmentInBytes == 0, "not oop aligned");
  60   assert(_g1->is_in_reserved(obj), "must be in heap");
  61 #endif // ASSERT
  62 
  63   assert(from == NULL || from->is_in_reserved(p), "p is not in from");
  64 
  65   HeapRegion* to = _g1->heap_region_containing(obj);
  66   if (from != to) {
  67     assert(to->rem_set() != NULL, "Need per-region 'into' remsets.");
  68     to->rem_set()->add_reference(p, tid);
  69   }
  70 }
  71 
  72 template <class T>
  73 inline void UpdateRSOopClosure::do_oop_work(T* p) {
  74   assert(_from != NULL, "from region must be non-NULL");
  75   _rs->par_write_ref(_from, p, _worker_i);
  76 }
  77 
  78 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_INLINE_HPP
< prev index next >