< prev index next >

src/hotspot/share/oops/oop.inline.hpp

Print this page




 334 }
 335 
 336 // Used only for markSweep, scavenging
 337 bool oopDesc::is_gc_marked() const {
 338   return mark_raw()->is_marked();
 339 }
 340 
 341 // Used by scavengers
 342 bool oopDesc::is_forwarded() const {
 343   // The extra heap check is needed since the obj might be locked, in which case the
 344   // mark would point to a stack location and have the sentinel bit cleared
 345   return mark_raw()->is_marked();
 346 }
 347 
 348 // Used by scavengers
 349 void oopDesc::forward_to(oop p) {
 350   assert(check_obj_alignment(p),
 351          "forwarding to something not aligned");
 352   assert(Universe::heap()->is_in_reserved(p),
 353          "forwarding to something not in heap");
 354   assert(!is_archive_object(oop(this)) &&
 355          !is_archive_object(p),
 356          "forwarding archive object");
 357   markOop m = markOopDesc::encode_pointer_as_mark(p);
 358   assert(m->decode_pointer() == p, "encoding must be reversable");
 359   set_mark_raw(m);
 360 }
 361 
 362 // Used by parallel scavengers
 363 bool oopDesc::cas_forward_to(oop p, markOop compare, atomic_memory_order order) {
 364   assert(check_obj_alignment(p),
 365          "forwarding to something not aligned");
 366   assert(Universe::heap()->is_in_reserved(p),
 367          "forwarding to something not in heap");
 368   markOop m = markOopDesc::encode_pointer_as_mark(p);
 369   assert(m->decode_pointer() == p, "encoding must be reversable");
 370   return cas_set_mark_raw(m, compare, order) == compare;
 371 }
 372 
 373 oop oopDesc::forward_to_atomic(oop p, atomic_memory_order order) {
 374   markOop oldMark = mark_raw();
 375   markOop forwardPtrMark = markOopDesc::encode_pointer_as_mark(p);




 334 }
 335 
 336 // Used only for markSweep, scavenging
 337 bool oopDesc::is_gc_marked() const {
 338   return mark_raw()->is_marked();
 339 }
 340 
 341 // Used by scavengers
 342 bool oopDesc::is_forwarded() const {
 343   // The extra heap check is needed since the obj might be locked, in which case the
 344   // mark would point to a stack location and have the sentinel bit cleared
 345   return mark_raw()->is_marked();
 346 }
 347 
 348 // Used by scavengers
 349 void oopDesc::forward_to(oop p) {
 350   assert(check_obj_alignment(p),
 351          "forwarding to something not aligned");
 352   assert(Universe::heap()->is_in_reserved(p),
 353          "forwarding to something not in heap");
 354   assert(!is_archived_object(oop(this)) &&
 355          !is_archived_object(p),
 356          "forwarding archive object");
 357   markOop m = markOopDesc::encode_pointer_as_mark(p);
 358   assert(m->decode_pointer() == p, "encoding must be reversable");
 359   set_mark_raw(m);
 360 }
 361 
 362 // Used by parallel scavengers
 363 bool oopDesc::cas_forward_to(oop p, markOop compare, atomic_memory_order order) {
 364   assert(check_obj_alignment(p),
 365          "forwarding to something not aligned");
 366   assert(Universe::heap()->is_in_reserved(p),
 367          "forwarding to something not in heap");
 368   markOop m = markOopDesc::encode_pointer_as_mark(p);
 369   assert(m->decode_pointer() == p, "encoding must be reversable");
 370   return cas_set_mark_raw(m, compare, order) == compare;
 371 }
 372 
 373 oop oopDesc::forward_to_atomic(oop p, atomic_memory_order order) {
 374   markOop oldMark = mark_raw();
 375   markOop forwardPtrMark = markOopDesc::encode_pointer_as_mark(p);


< prev index next >