< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp

Print this page




 238     if (_heap->is_concurrent_partial_in_progress()) {
 239       ShenandoahUpdateRefsForOopClosure<true, true, false> cl;
 240       obj->oop_iterate(&cl);
 241     } else {
 242       ShenandoahUpdateRefsForOopClosure<true, false, false> cl;
 243       obj->oop_iterate(&cl);
 244     }
 245   } else {
 246     assert(! _heap->is_concurrent_partial_in_progress(), "partial GC needs matrix");
 247     if (_heap->is_concurrent_traversal_in_progress()) {
 248       ShenandoahUpdateRefsForOopClosure<false, true, true> cl;
 249       obj->oop_iterate(&cl);
 250     } else {
 251       ShenandoahUpdateRefsForOopClosure<false, false, false> cl;
 252       obj->oop_iterate(&cl);
 253     }
 254   }
 255 }
 256 
 257 oop ShenandoahBarrierSet::read_barrier(oop src) {
 258   if (ShenandoahReadBarrier) {




 259     return ShenandoahBarrierSet::resolve_forwarded(src);
 260   } else {
 261     return src;
 262   }
 263 }
 264 
 265 bool ShenandoahBarrierSet::obj_equals(oop obj1, oop obj2) {
 266   bool eq = oopDesc::unsafe_equals(obj1, obj2);
 267   if (! eq && ShenandoahAcmpBarrier) {
 268     OrderAccess::loadload();
 269     obj1 = resolve_forwarded(obj1);
 270     obj2 = resolve_forwarded(obj2);
 271     eq = oopDesc::unsafe_equals(obj1, obj2);
 272   }
 273   return eq;
 274 }
 275 
 276 JRT_LEAF(oopDesc*, ShenandoahBarrierSet::write_barrier_JRT(oopDesc* src))
 277   oop result = ((ShenandoahBarrierSet*)BarrierSet::barrier_set())->write_barrier(src);
 278   return (oopDesc*) result;




 238     if (_heap->is_concurrent_partial_in_progress()) {
 239       ShenandoahUpdateRefsForOopClosure<true, true, false> cl;
 240       obj->oop_iterate(&cl);
 241     } else {
 242       ShenandoahUpdateRefsForOopClosure<true, false, false> cl;
 243       obj->oop_iterate(&cl);
 244     }
 245   } else {
 246     assert(! _heap->is_concurrent_partial_in_progress(), "partial GC needs matrix");
 247     if (_heap->is_concurrent_traversal_in_progress()) {
 248       ShenandoahUpdateRefsForOopClosure<false, true, true> cl;
 249       obj->oop_iterate(&cl);
 250     } else {
 251       ShenandoahUpdateRefsForOopClosure<false, false, false> cl;
 252       obj->oop_iterate(&cl);
 253     }
 254   }
 255 }
 256 
 257 oop ShenandoahBarrierSet::read_barrier(oop src) {
 258   // Check for forwarded objects, because on Full GC path we might deal with
 259   // non-trivial fwdptrs that contain Full GC specific metadata. We could check
 260   // for is_full_gc_in_progress(), but this also covers the case of stable heap,
 261   // which provides a bit of performance improvement.
 262   if (ShenandoahReadBarrier && _heap->has_forwarded_objects()) {
 263     return ShenandoahBarrierSet::resolve_forwarded(src);
 264   } else {
 265     return src;
 266   }
 267 }
 268 
 269 bool ShenandoahBarrierSet::obj_equals(oop obj1, oop obj2) {
 270   bool eq = oopDesc::unsafe_equals(obj1, obj2);
 271   if (! eq && ShenandoahAcmpBarrier) {
 272     OrderAccess::loadload();
 273     obj1 = resolve_forwarded(obj1);
 274     obj2 = resolve_forwarded(obj2);
 275     eq = oopDesc::unsafe_equals(obj1, obj2);
 276   }
 277   return eq;
 278 }
 279 
 280 JRT_LEAF(oopDesc*, ShenandoahBarrierSet::write_barrier_JRT(oopDesc* src))
 281   oop result = ((ShenandoahBarrierSet*)BarrierSet::barrier_set())->write_barrier(src);
 282   return (oopDesc*) result;


< prev index next >