52 |
52 |
53 void MarkSweep::FollowRootClosure::do_oop(oop* p) { follow_root(p); } |
53 void MarkSweep::FollowRootClosure::do_oop(oop* p) { follow_root(p); } |
54 void MarkSweep::FollowRootClosure::do_oop(narrowOop* p) { follow_root(p); } |
54 void MarkSweep::FollowRootClosure::do_oop(narrowOop* p) { follow_root(p); } |
55 |
55 |
56 MarkSweep::MarkAndPushClosure MarkSweep::mark_and_push_closure; |
56 MarkSweep::MarkAndPushClosure MarkSweep::mark_and_push_closure; |
57 CLDToOopClosure MarkSweep::follow_cld_closure(&mark_and_push_closure); |
57 MarkSweep::FollowKlassClosure MarkSweep::follow_klass_closure; |
58 CLDToOopClosure MarkSweep::adjust_cld_closure(&adjust_pointer_closure); |
58 MarkSweep::AdjustKlassClosure MarkSweep::adjust_klass_closure; |
59 |
59 |
60 void MarkSweep::MarkAndPushClosure::do_oop(oop* p) { mark_and_push(p); } |
60 void MarkSweep::MarkAndPushClosure::do_oop(oop* p) { mark_and_push(p); } |
61 void MarkSweep::MarkAndPushClosure::do_oop(narrowOop* p) { mark_and_push(p); } |
61 void MarkSweep::MarkAndPushClosure::do_oop(narrowOop* p) { mark_and_push(p); } |
62 |
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 |
63 void MarkSweep::follow_class_loader(ClassLoaderData* cld) { |
70 void MarkSweep::follow_class_loader(ClassLoaderData* cld) { |
64 MarkSweep::follow_cld_closure.do_cld(cld); |
71 cld->oops_do(&MarkSweep::mark_and_push_closure, &MarkSweep::follow_klass_closure, true); |
65 } |
72 } |
66 |
73 |
67 void MarkSweep::follow_stack() { |
74 void MarkSweep::follow_stack() { |
68 do { |
75 do { |
69 while (!_marking_stack.is_empty()) { |
76 while (!_marking_stack.is_empty()) { |