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 |