56 // |
56 // |
57 class FollowRootClosure: public OopsInGenClosure { |
57 class FollowRootClosure: public OopsInGenClosure { |
58 public: |
58 public: |
59 virtual void do_oop(oop* p); |
59 virtual void do_oop(oop* p); |
60 virtual void do_oop(narrowOop* p); |
60 virtual void do_oop(narrowOop* p); |
61 virtual const bool do_nmethods() const { return true; } |
|
62 }; |
61 }; |
63 |
62 |
64 class MarkAndPushClosure: public OopClosure { |
63 class MarkAndPushClosure: public OopClosure { |
65 public: |
64 public: |
66 virtual void do_oop(oop* p); |
65 virtual void do_oop(oop* p); |
67 virtual void do_oop(narrowOop* p); |
66 virtual void do_oop(narrowOop* p); |
68 virtual const bool do_nmethods() const { return true; } |
|
69 virtual const bool should_remember_mdo() const { return true; } |
67 virtual const bool should_remember_mdo() const { return true; } |
70 virtual void remember_mdo(DataLayout* p) { MarkSweep::revisit_mdo(p); } |
68 virtual void remember_mdo(DataLayout* p) { MarkSweep::revisit_mdo(p); } |
71 }; |
69 }; |
72 |
70 |
73 class FollowStackClosure: public VoidClosure { |
71 class FollowStackClosure: public VoidClosure { |
171 static void trace(const char* msg) PRODUCT_RETURN; |
169 static void trace(const char* msg) PRODUCT_RETURN; |
172 |
170 |
173 public: |
171 public: |
174 // Public closures |
172 // Public closures |
175 static FollowRootClosure follow_root_closure; |
173 static FollowRootClosure follow_root_closure; |
|
174 static CodeBlobToOopClosure follow_code_root_closure; // => follow_root_closure |
176 static MarkAndPushClosure mark_and_push_closure; |
175 static MarkAndPushClosure mark_and_push_closure; |
177 static FollowStackClosure follow_stack_closure; |
176 static FollowStackClosure follow_stack_closure; |
178 static AdjustPointerClosure adjust_root_pointer_closure; |
177 static AdjustPointerClosure adjust_root_pointer_closure; |
179 static AdjustPointerClosure adjust_pointer_closure; |
178 static AdjustPointerClosure adjust_pointer_closure; |
180 |
179 |