24 |
24 |
25 #ifndef SHARE_VM_JFR_LEAKPROFILER_CHAINS_ROOTSETCLOSURE_HPP |
25 #ifndef SHARE_VM_JFR_LEAKPROFILER_CHAINS_ROOTSETCLOSURE_HPP |
26 #define SHARE_VM_JFR_LEAKPROFILER_CHAINS_ROOTSETCLOSURE_HPP |
26 #define SHARE_VM_JFR_LEAKPROFILER_CHAINS_ROOTSETCLOSURE_HPP |
27 |
27 |
28 #include "memory/iterator.hpp" |
28 #include "memory/iterator.hpp" |
29 #include "oops/oop.hpp" |
|
30 |
29 |
31 class EdgeQueue; |
30 template <typename Delegate> |
32 |
|
33 class RootSetClosure: public ExtendedOopClosure { // BasicOopIterateClosure |
31 class RootSetClosure: public ExtendedOopClosure { // BasicOopIterateClosure |
34 private: |
32 private: |
35 RootSetClosure(EdgeQueue* edge_queue); |
33 Delegate* const _delegate; |
36 EdgeQueue* _edge_queue; |
|
37 void closure_impl(const oop* reference, const oop pointee); |
|
38 public: |
34 public: |
39 static void add_to_queue(EdgeQueue* edge_queue); |
35 RootSetClosure(Delegate* delegate); |
40 static void process_roots(OopClosure* closure); |
36 void process(); |
41 |
37 |
42 virtual void do_oop(oop* reference); |
38 virtual void do_oop(oop* reference); |
43 virtual void do_oop(narrowOop* reference); |
39 virtual void do_oop(narrowOop* reference); |
44 }; |
40 }; |
45 |
41 |