< prev index next >

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

Print this page




  33 #include "oops/compressedOops.inline.hpp"
  34 #include "oops/oop.inline.hpp"
  35 #include "utilities/align.hpp"
  36 #include "utilities/stack.inline.hpp"
  37 
  38 inline void MarkSweep::mark_object(oop obj) {
  39   // some marks may contain information we need to preserve so we store them away
  40   // and overwrite the mark.  We'll restore it at the end of markSweep.
  41   markWord mark = obj->mark_raw();
  42   obj->set_mark_raw(markWord::prototype().set_marked());
  43 
  44   if (obj->mark_must_be_preserved(mark)) {
  45     preserve_mark(obj, mark);
  46   }
  47 }
  48 
  49 template <class T> inline void MarkSweep::mark_and_push(T* p) {
  50   T heap_oop = RawAccess<>::oop_load(p);
  51   if (!CompressedOops::is_null(heap_oop)) {
  52     oop obj = CompressedOops::decode_not_null(heap_oop);


  53     if (!obj->mark_raw().is_marked()) {
  54       mark_object(obj);
  55       _marking_stack.push(obj);
  56     }
  57   }
  58 }
  59 
  60 inline void MarkSweep::follow_klass(Klass* klass) {
  61   oop op = klass->class_loader_data()->holder_no_keepalive();
  62   MarkSweep::mark_and_push(&op);
  63 }
  64 
  65 inline void MarkSweep::follow_cld(ClassLoaderData* cld) {
  66   MarkSweep::follow_cld_closure.do_cld(cld);
  67 }
  68 
  69 template <typename T>
  70 inline void MarkAndPushClosure::do_oop_work(T* p)            { MarkSweep::mark_and_push(p); }
  71 inline void MarkAndPushClosure::do_oop(oop* p)               { do_oop_work(p); }
  72 inline void MarkAndPushClosure::do_oop(narrowOop* p)         { do_oop_work(p); }




  33 #include "oops/compressedOops.inline.hpp"
  34 #include "oops/oop.inline.hpp"
  35 #include "utilities/align.hpp"
  36 #include "utilities/stack.inline.hpp"
  37 
  38 inline void MarkSweep::mark_object(oop obj) {
  39   // some marks may contain information we need to preserve so we store them away
  40   // and overwrite the mark.  We'll restore it at the end of markSweep.
  41   markWord mark = obj->mark_raw();
  42   obj->set_mark_raw(markWord::prototype().set_marked());
  43 
  44   if (obj->mark_must_be_preserved(mark)) {
  45     preserve_mark(obj, mark);
  46   }
  47 }
  48 
  49 template <class T> inline void MarkSweep::mark_and_push(T* p) {
  50   T heap_oop = RawAccess<>::oop_load(p);
  51   if (!CompressedOops::is_null(heap_oop)) {
  52     oop obj = CompressedOops::decode_not_null(heap_oop);
  53     assert_object_is_in_heap(p, obj);
  54 
  55     if (!obj->mark_raw().is_marked()) {
  56       mark_object(obj);
  57       _marking_stack.push(obj);
  58     }
  59   }
  60 }
  61 
  62 inline void MarkSweep::follow_klass(Klass* klass) {
  63   oop op = klass->class_loader_data()->holder_no_keepalive();
  64   MarkSweep::mark_and_push(&op);
  65 }
  66 
  67 inline void MarkSweep::follow_cld(ClassLoaderData* cld) {
  68   MarkSweep::follow_cld_closure.do_cld(cld);
  69 }
  70 
  71 template <typename T>
  72 inline void MarkAndPushClosure::do_oop_work(T* p)            { MarkSweep::mark_and_push(p); }
  73 inline void MarkAndPushClosure::do_oop(oop* p)               { do_oop_work(p); }
  74 inline void MarkAndPushClosure::do_oop(narrowOop* p)         { do_oop_work(p); }


< prev index next >