< prev index next >

src/hotspot/share/gc/serial/markSweep.inline.hpp

Print this page




  40   markOop mark = obj->mark_raw();
  41   obj->set_mark_raw(markOopDesc::prototype()->set_marked());
  42 
  43   if (mark->must_be_preserved(obj)) {
  44     preserve_mark(obj, mark);
  45   }
  46 }
  47 
  48 template <class T> inline void MarkSweep::mark_and_push(T* p) {
  49   T heap_oop = RawAccess<>::oop_load(p);
  50   if (!CompressedOops::is_null(heap_oop)) {
  51     oop obj = CompressedOops::decode_not_null(heap_oop);
  52     if (!obj->mark_raw()->is_marked()) {
  53       mark_object(obj);
  54       _marking_stack.push(obj);
  55     }
  56   }
  57 }
  58 
  59 inline void MarkSweep::follow_klass(Klass* klass) {
  60   oop op = klass->klass_holder();
  61   MarkSweep::mark_and_push(&op);
  62 }
  63 
  64 inline void MarkSweep::follow_cld(ClassLoaderData* cld) {
  65   MarkSweep::follow_cld_closure.do_cld(cld);
  66 }
  67 
  68 template <typename T>
  69 inline void MarkAndPushClosure::do_oop_work(T* p)            { MarkSweep::mark_and_push(p); }
  70 inline void MarkAndPushClosure::do_oop(oop* p)               { do_oop_work(p); }
  71 inline void MarkAndPushClosure::do_oop(narrowOop* p)         { do_oop_work(p); }
  72 inline void MarkAndPushClosure::do_klass(Klass* k)           { MarkSweep::follow_klass(k); }
  73 inline void MarkAndPushClosure::do_cld(ClassLoaderData* cld) { MarkSweep::follow_cld(cld); }
  74 
  75 template <class T> inline void MarkSweep::adjust_pointer(T* p) {
  76   T heap_oop = RawAccess<>::oop_load(p);
  77   if (!CompressedOops::is_null(heap_oop)) {
  78     oop obj = CompressedOops::decode_not_null(heap_oop);
  79     assert(Universe::heap()->is_in(obj), "should be in heap");
  80 




  40   markOop mark = obj->mark_raw();
  41   obj->set_mark_raw(markOopDesc::prototype()->set_marked());
  42 
  43   if (mark->must_be_preserved(obj)) {
  44     preserve_mark(obj, mark);
  45   }
  46 }
  47 
  48 template <class T> inline void MarkSweep::mark_and_push(T* p) {
  49   T heap_oop = RawAccess<>::oop_load(p);
  50   if (!CompressedOops::is_null(heap_oop)) {
  51     oop obj = CompressedOops::decode_not_null(heap_oop);
  52     if (!obj->mark_raw()->is_marked()) {
  53       mark_object(obj);
  54       _marking_stack.push(obj);
  55     }
  56   }
  57 }
  58 
  59 inline void MarkSweep::follow_klass(Klass* klass) {
  60   oop op = klass->class_loader_data()->holder_no_keepalive();
  61   MarkSweep::mark_and_push(&op);
  62 }
  63 
  64 inline void MarkSweep::follow_cld(ClassLoaderData* cld) {
  65   MarkSweep::follow_cld_closure.do_cld(cld);
  66 }
  67 
  68 template <typename T>
  69 inline void MarkAndPushClosure::do_oop_work(T* p)            { MarkSweep::mark_and_push(p); }
  70 inline void MarkAndPushClosure::do_oop(oop* p)               { do_oop_work(p); }
  71 inline void MarkAndPushClosure::do_oop(narrowOop* p)         { do_oop_work(p); }
  72 inline void MarkAndPushClosure::do_klass(Klass* k)           { MarkSweep::follow_klass(k); }
  73 inline void MarkAndPushClosure::do_cld(ClassLoaderData* cld) { MarkSweep::follow_cld(cld); }
  74 
  75 template <class T> inline void MarkSweep::adjust_pointer(T* p) {
  76   T heap_oop = RawAccess<>::oop_load(p);
  77   if (!CompressedOops::is_null(heap_oop)) {
  78     oop obj = CompressedOops::decode_not_null(heap_oop);
  79     assert(Universe::heap()->is_in(obj), "should be in heap");
  80 


< prev index next >