< prev index next >

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

Print this page




  55 
  56   if (mark->must_be_preserved(obj)) {
  57     preserve_mark(obj, mark);
  58   }
  59 }
  60 
  61 inline bool MarkSweep::is_archive_object(oop object) {
  62 #if INCLUDE_ALL_GCS
  63   return (G1MarkSweep::archive_check_enabled() &&
  64           G1MarkSweep::in_archive_range(object));
  65 #else
  66   return false;
  67 #endif
  68 }
  69 
  70 inline void MarkSweep::follow_klass(Klass* klass) {
  71   oop op = klass->klass_holder();
  72   MarkSweep::mark_and_push(&op);
  73 }
  74 




  75 inline void MarkSweep::follow_object(oop obj) {
  76   assert(obj->is_gc_marked(), "should be marked");
  77 
  78   obj->ms_follow_contents();
  79 }
  80 
  81 template <class T> inline void MarkSweep::follow_root(T* p) {
  82   assert(!Universe::heap()->is_in_reserved(p),
  83          "roots shouldn't be things within the heap");
  84   T heap_oop = oopDesc::load_heap_oop(p);
  85   if (!oopDesc::is_null(heap_oop)) {
  86     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
  87     if (!obj->mark()->is_marked() &&
  88         !is_archive_object(obj)) {
  89       mark_object(obj);
  90       follow_object(obj);
  91     }
  92   }
  93   follow_stack();
  94 }
  95 
  96 template <class T> inline void MarkSweep::mark_and_push(T* p) {
  97 //  assert(Universe::heap()->is_in_reserved(p), "should be in object space");
  98   T heap_oop = oopDesc::load_heap_oop(p);




  55 
  56   if (mark->must_be_preserved(obj)) {
  57     preserve_mark(obj, mark);
  58   }
  59 }
  60 
  61 inline bool MarkSweep::is_archive_object(oop object) {
  62 #if INCLUDE_ALL_GCS
  63   return (G1MarkSweep::archive_check_enabled() &&
  64           G1MarkSweep::in_archive_range(object));
  65 #else
  66   return false;
  67 #endif
  68 }
  69 
  70 inline void MarkSweep::follow_klass(Klass* klass) {
  71   oop op = klass->klass_holder();
  72   MarkSweep::mark_and_push(&op);
  73 }
  74 
  75 inline void MarkSweep::follow_cld(ClassLoaderData* cld) {
  76   MarkSweep::follow_cld_closure.do_cld(cld);
  77 }
  78 
  79 inline void MarkSweep::follow_object(oop obj) {
  80   assert(obj->is_gc_marked(), "should be marked");
  81 
  82   obj->oop_iterate(&mark_and_push_closure);
  83 }
  84 
  85 template <class T> inline void MarkSweep::follow_root(T* p) {
  86   assert(!Universe::heap()->is_in_reserved(p),
  87          "roots shouldn't be things within the heap");
  88   T heap_oop = oopDesc::load_heap_oop(p);
  89   if (!oopDesc::is_null(heap_oop)) {
  90     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
  91     if (!obj->mark()->is_marked() &&
  92         !is_archive_object(obj)) {
  93       mark_object(obj);
  94       follow_object(obj);
  95     }
  96   }
  97   follow_stack();
  98 }
  99 
 100 template <class T> inline void MarkSweep::mark_and_push(T* p) {
 101 //  assert(Universe::heap()->is_in_reserved(p), "should be in object space");
 102   T heap_oop = oopDesc::load_heap_oop(p);


< prev index next >