src/share/vm/gc_implementation/shared/markSweep.cpp

Print this page




  37 uint                    MarkSweep::_total_invocations = 0;
  38 
  39 Stack<oop, mtGC>              MarkSweep::_marking_stack;
  40 Stack<ObjArrayTask, mtGC>     MarkSweep::_objarray_stack;
  41 
  42 Stack<oop, mtGC>              MarkSweep::_preserved_oop_stack;
  43 Stack<markOop, mtGC>          MarkSweep::_preserved_mark_stack;
  44 size_t                  MarkSweep::_preserved_count = 0;
  45 size_t                  MarkSweep::_preserved_count_max = 0;
  46 PreservedMark*          MarkSweep::_preserved_marks = NULL;
  47 ReferenceProcessor*     MarkSweep::_ref_processor   = NULL;
  48 STWGCTimer*             MarkSweep::_gc_timer        = NULL;
  49 SerialOldTracer*        MarkSweep::_gc_tracer       = NULL;
  50 
  51 MarkSweep::FollowRootClosure  MarkSweep::follow_root_closure;
  52 
  53 void MarkSweep::FollowRootClosure::do_oop(oop* p)       { follow_root(p); }
  54 void MarkSweep::FollowRootClosure::do_oop(narrowOop* p) { follow_root(p); }
  55 
  56 MarkSweep::MarkAndPushClosure MarkSweep::mark_and_push_closure;
  57 MarkSweep::FollowKlassClosure MarkSweep::follow_klass_closure;
  58 MarkSweep::AdjustKlassClosure MarkSweep::adjust_klass_closure;
  59 
  60 void MarkSweep::MarkAndPushClosure::do_oop(oop* p)       { mark_and_push(p); }
  61 void MarkSweep::MarkAndPushClosure::do_oop(narrowOop* p) { mark_and_push(p); }
  62 
  63 void MarkSweep::FollowKlassClosure::do_klass(Klass* klass) {
  64   klass->oops_do(&MarkSweep::mark_and_push_closure);
  65 }
  66 void MarkSweep::AdjustKlassClosure::do_klass(Klass* klass) {
  67   klass->oops_do(&MarkSweep::adjust_pointer_closure);
  68 }
  69 
  70 void MarkSweep::follow_class_loader(ClassLoaderData* cld) {
  71   cld->oops_do(&MarkSweep::mark_and_push_closure, &MarkSweep::follow_klass_closure, true);
  72 }
  73 
  74 void MarkSweep::follow_stack() {
  75   do {
  76     while (!_marking_stack.is_empty()) {
  77       oop obj = _marking_stack.pop();
  78       assert (obj->is_gc_marked(), "p must be marked");
  79       obj->follow_contents();
  80     }
  81     // Process ObjArrays one at a time to avoid marking stack bloat.
  82     if (!_objarray_stack.is_empty()) {
  83       ObjArrayTask task = _objarray_stack.pop();
  84       ObjArrayKlass* k = (ObjArrayKlass*)task.obj()->klass();
  85       k->oop_follow_contents(task.obj(), task.index());
  86     }
  87   } while (!_marking_stack.is_empty() || !_objarray_stack.is_empty());
  88 }
  89 
  90 MarkSweep::FollowStackClosure MarkSweep::follow_stack_closure;
  91 




  37 uint                    MarkSweep::_total_invocations = 0;
  38 
  39 Stack<oop, mtGC>              MarkSweep::_marking_stack;
  40 Stack<ObjArrayTask, mtGC>     MarkSweep::_objarray_stack;
  41 
  42 Stack<oop, mtGC>              MarkSweep::_preserved_oop_stack;
  43 Stack<markOop, mtGC>          MarkSweep::_preserved_mark_stack;
  44 size_t                  MarkSweep::_preserved_count = 0;
  45 size_t                  MarkSweep::_preserved_count_max = 0;
  46 PreservedMark*          MarkSweep::_preserved_marks = NULL;
  47 ReferenceProcessor*     MarkSweep::_ref_processor   = NULL;
  48 STWGCTimer*             MarkSweep::_gc_timer        = NULL;
  49 SerialOldTracer*        MarkSweep::_gc_tracer       = NULL;
  50 
  51 MarkSweep::FollowRootClosure  MarkSweep::follow_root_closure;
  52 
  53 void MarkSweep::FollowRootClosure::do_oop(oop* p)       { follow_root(p); }
  54 void MarkSweep::FollowRootClosure::do_oop(narrowOop* p) { follow_root(p); }
  55 
  56 MarkSweep::MarkAndPushClosure MarkSweep::mark_and_push_closure;
  57 CLDToOopClosure               MarkSweep::follow_cld_closure(&mark_and_push_closure);
  58 CLDToOopClosure               MarkSweep::adjust_cld_closure(&adjust_pointer_closure);
  59 
  60 void MarkSweep::MarkAndPushClosure::do_oop(oop* p)       { mark_and_push(p); }
  61 void MarkSweep::MarkAndPushClosure::do_oop(narrowOop* p) { mark_and_push(p); }
  62 







  63 void MarkSweep::follow_class_loader(ClassLoaderData* cld) {
  64   MarkSweep::follow_cld_closure.do_cld(cld);
  65 }
  66 
  67 void MarkSweep::follow_stack() {
  68   do {
  69     while (!_marking_stack.is_empty()) {
  70       oop obj = _marking_stack.pop();
  71       assert (obj->is_gc_marked(), "p must be marked");
  72       obj->follow_contents();
  73     }
  74     // Process ObjArrays one at a time to avoid marking stack bloat.
  75     if (!_objarray_stack.is_empty()) {
  76       ObjArrayTask task = _objarray_stack.pop();
  77       ObjArrayKlass* k = (ObjArrayKlass*)task.obj()->klass();
  78       k->oop_follow_contents(task.obj(), task.index());
  79     }
  80   } while (!_marking_stack.is_empty() || !_objarray_stack.is_empty());
  81 }
  82 
  83 MarkSweep::FollowStackClosure MarkSweep::follow_stack_closure;
  84