23 */ |
23 */ |
24 |
24 |
25 #ifndef SHARE_JFR_LEAKPROFILER_STOPOPERATION_HPP |
25 #ifndef SHARE_JFR_LEAKPROFILER_STOPOPERATION_HPP |
26 #define SHARE_JFR_LEAKPROFILER_STOPOPERATION_HPP |
26 #define SHARE_JFR_LEAKPROFILER_STOPOPERATION_HPP |
27 |
27 |
28 #include "jfr/leakprofiler/leakProfiler.hpp" |
|
29 #include "jfr/leakprofiler/sampling/objectSampler.hpp" |
28 #include "jfr/leakprofiler/sampling/objectSampler.hpp" |
30 #include "jfr/recorder/service/jfrOptionSet.hpp" |
29 #include "jfr/leakprofiler/utilities/vmOperation.hpp" |
31 #include "logging/log.hpp" |
|
32 #include "runtime/vmOperations.hpp" |
|
33 |
30 |
34 // Safepoint operation for stopping leak profiler object sampler |
31 // Safepoint operation for stopping and destroying the leak profiler object sampler |
35 class StopOperation : public VM_Operation { |
32 class StopOperation : public OldObjectVMOperation { |
36 public: |
33 public: |
37 StopOperation() {} |
|
38 |
|
39 Mode evaluation_mode() const { |
|
40 return _safepoint; |
|
41 } |
|
42 |
|
43 VMOp_Type type() const { |
|
44 return VMOp_GC_HeapInspection; |
|
45 } |
|
46 |
|
47 virtual void doit() { |
34 virtual void doit() { |
48 assert(LeakProfiler::is_running(), "invariant"); |
35 ObjectSampler::destroy(); |
49 ObjectSampler* object_sampler = LeakProfiler::object_sampler(); |
|
50 delete object_sampler; |
|
51 LeakProfiler::set_object_sampler(NULL); |
|
52 log_trace(jfr, system)( "Object sampling stopped"); |
|
53 } |
36 } |
54 }; |
37 }; |
55 |
38 |
56 #endif // SHARE_JFR_LEAKPROFILER_STOPOPERATION_HPP |
39 #endif // SHARE_JFR_LEAKPROFILER_STOPOPERATION_HPP |