45 class ReferenceProcessorStats; |
46 class ReferenceProcessorStats; |
46 class TimePartitions; |
47 class TimePartitions; |
47 class BoolObjectClosure; |
48 class BoolObjectClosure; |
48 |
49 |
49 class SharedGCInfo VALUE_OBJ_CLASS_SPEC { |
50 class SharedGCInfo VALUE_OBJ_CLASS_SPEC { |
50 static const jlong UNSET_TIMESTAMP = -1; |
|
51 |
|
52 public: |
51 public: |
53 static const GCId UNSET_GCID = (GCId)-1; |
52 static const GCId UNSET_GCID = (GCId)-1; |
54 |
53 |
55 private: |
54 private: |
56 GCId _id; |
55 GCId _id; |
57 GCName _name; |
56 GCName _name; |
58 GCCause::Cause _cause; |
57 GCCause::Cause _cause; |
59 jlong _start_timestamp; |
58 Ticks _start_timestamp; |
60 jlong _end_timestamp; |
59 Ticks _end_timestamp; |
61 jlong _sum_of_pauses; |
60 Tickspan _sum_of_pauses; |
62 jlong _longest_pause; |
61 Tickspan _longest_pause; |
63 |
62 |
64 public: |
63 public: |
65 SharedGCInfo(GCName name) : _id(UNSET_GCID), _name(name), _cause(GCCause::_last_gc_cause), |
64 SharedGCInfo(GCName name) : |
66 _start_timestamp(UNSET_TIMESTAMP), _end_timestamp(UNSET_TIMESTAMP), _sum_of_pauses(0), _longest_pause(0) {} |
65 _id(UNSET_GCID), |
|
66 _name(name), |
|
67 _cause(GCCause::_last_gc_cause), |
|
68 _start_timestamp(), |
|
69 _end_timestamp(), |
|
70 _sum_of_pauses(), |
|
71 _longest_pause() { |
|
72 } |
67 |
73 |
68 void set_id(GCId id) { _id = id; } |
74 void set_id(GCId id) { _id = id; } |
69 GCId id() const { return _id; } |
75 GCId id() const { return _id; } |
70 |
76 |
71 void set_start_timestamp(jlong timestamp) { _start_timestamp = timestamp; } |
77 void set_start_timestamp(const Ticks& timestamp) { _start_timestamp = timestamp; } |
72 jlong start_timestamp() const { return _start_timestamp; } |
78 const Ticks start_timestamp() const { return _start_timestamp; } |
73 |
79 |
74 void set_end_timestamp(jlong timestamp) { _end_timestamp = timestamp; } |
80 void set_end_timestamp(const Ticks& timestamp) { _end_timestamp = timestamp; } |
75 jlong end_timestamp() const { return _end_timestamp; } |
81 const Ticks end_timestamp() const { return _end_timestamp; } |
76 |
82 |
77 void set_name(GCName name) { _name = name; } |
83 void set_name(GCName name) { _name = name; } |
78 GCName name() const { return _name; } |
84 GCName name() const { return _name; } |
79 |
85 |
80 void set_cause(GCCause::Cause cause) { _cause = cause; } |
86 void set_cause(GCCause::Cause cause) { _cause = cause; } |
81 GCCause::Cause cause() const { return _cause; } |
87 GCCause::Cause cause() const { return _cause; } |
82 |
88 |
83 void set_sum_of_pauses(jlong duration) { _sum_of_pauses = duration; } |
89 void set_sum_of_pauses(const Tickspan& duration) { _sum_of_pauses = duration; } |
84 jlong sum_of_pauses() const { return _sum_of_pauses; } |
90 const Tickspan sum_of_pauses() const { return _sum_of_pauses; } |
85 |
91 |
86 void set_longest_pause(jlong duration) { _longest_pause = duration; } |
92 void set_longest_pause(const Tickspan& duration) { _longest_pause = duration; } |
87 jlong longest_pause() const { return _longest_pause; } |
93 const Tickspan longest_pause() const { return _longest_pause; } |
88 }; |
94 }; |
89 |
95 |
90 class ParallelOldGCInfo VALUE_OBJ_CLASS_SPEC { |
96 class ParallelOldGCInfo VALUE_OBJ_CLASS_SPEC { |
91 void* _dense_prefix; |
97 void* _dense_prefix; |
92 public: |
98 public: |
114 class GCTracer : public ResourceObj { |
120 class GCTracer : public ResourceObj { |
115 protected: |
121 protected: |
116 SharedGCInfo _shared_gc_info; |
122 SharedGCInfo _shared_gc_info; |
117 |
123 |
118 public: |
124 public: |
119 void report_gc_start(GCCause::Cause cause, jlong timestamp); |
125 void report_gc_start(GCCause::Cause cause, const Ticks& timestamp); |
120 void report_gc_end(jlong timestamp, TimePartitions* time_partitions); |
126 void report_gc_end(const Ticks& timestamp, TimePartitions* time_partitions); |
121 void report_gc_heap_summary(GCWhen::Type when, const GCHeapSummary& heap_summary, const MetaspaceSummary& meta_space_summary) const; |
127 void report_gc_heap_summary(GCWhen::Type when, const GCHeapSummary& heap_summary, const MetaspaceSummary& meta_space_summary) const; |
122 void report_gc_reference_stats(const ReferenceProcessorStats& rp) const; |
128 void report_gc_reference_stats(const ReferenceProcessorStats& rp) const; |
123 void report_object_count_after_gc(BoolObjectClosure* object_filter) NOT_SERVICES_RETURN; |
129 void report_object_count_after_gc(BoolObjectClosure* object_filter) NOT_SERVICES_RETURN; |
124 bool has_reported_gc_start() const; |
130 bool has_reported_gc_start() const; |
125 |
131 |
126 protected: |
132 protected: |
127 GCTracer(GCName name) : _shared_gc_info(name) {} |
133 GCTracer(GCName name) : _shared_gc_info(name) {} |
128 virtual void report_gc_start_impl(GCCause::Cause cause, jlong timestamp); |
134 virtual void report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp); |
129 virtual void report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions); |
135 virtual void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions); |
130 |
136 |
131 private: |
137 private: |
132 void send_garbage_collection_event() const; |
138 void send_garbage_collection_event() const; |
133 void send_gc_heap_summary_event(GCWhen::Type when, const GCHeapSummary& heap_summary) const; |
139 void send_gc_heap_summary_event(GCWhen::Type when, const GCHeapSummary& heap_summary) const; |
134 void send_meta_space_summary_event(GCWhen::Type when, const MetaspaceSummary& meta_space_summary) const; |
140 void send_meta_space_summary_event(GCWhen::Type when, const MetaspaceSummary& meta_space_summary) const; |
141 |
147 |
142 uint _tenuring_threshold; |
148 uint _tenuring_threshold; |
143 |
149 |
144 protected: |
150 protected: |
145 YoungGCTracer(GCName name) : GCTracer(name), _tenuring_threshold(UNSET_TENURING_THRESHOLD) {} |
151 YoungGCTracer(GCName name) : GCTracer(name), _tenuring_threshold(UNSET_TENURING_THRESHOLD) {} |
146 virtual void report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions); |
152 virtual void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions); |
147 |
153 |
148 public: |
154 public: |
149 void report_promotion_failed(const PromotionFailedInfo& pf_info); |
155 void report_promotion_failed(const PromotionFailedInfo& pf_info); |
150 void report_tenuring_threshold(const uint tenuring_threshold); |
156 void report_tenuring_threshold(const uint tenuring_threshold); |
151 |
157 |
207 |
213 |
208 public: |
214 public: |
209 G1NewTracer() : YoungGCTracer(G1New) {} |
215 G1NewTracer() : YoungGCTracer(G1New) {} |
210 |
216 |
211 void report_yc_type(G1YCType type); |
217 void report_yc_type(G1YCType type); |
212 void report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions); |
218 void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions); |
213 void report_evacuation_info(EvacuationInfo* info); |
219 void report_evacuation_info(EvacuationInfo* info); |
214 void report_evacuation_failed(EvacuationFailedInfo& ef_info); |
220 void report_evacuation_failed(EvacuationFailedInfo& ef_info); |
215 |
221 |
216 private: |
222 private: |
217 void send_g1_young_gc_event(); |
223 void send_g1_young_gc_event(); |