15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_G1_G1GCPHASETIMES_HPP
26 #define SHARE_VM_GC_G1_G1GCPHASETIMES_HPP
27
28 #include "memory/allocation.hpp"
29
30 class LineBuffer;
31
32 template <class T> class WorkerDataArray;
33
34 class G1GCPhaseTimes : public CHeapObj<mtGC> {
35 friend class G1GCParPhasePrinter;
36
37 uint _active_gc_threads;
38 uint _max_gc_threads;
39 jlong _gc_start_counter;
40 double _gc_pause_time_ms;
41
42 public:
43 enum GCParPhases {
44 GCWorkerStart,
45 ExtRootScan,
46 ThreadRoots,
47 StringTableRoots,
48 UniverseRoots,
49 JNIRoots,
50 ObjectSynchronizerRoots,
51 FlatProfilerRoots,
52 ManagementRoots,
53 SystemDictionaryRoots,
54 CLDGRoots,
55 JVMTIRoots,
56 CMRefRoots,
104 double _external_accounted_time_ms;
105
106 double _recorded_young_cset_choice_time_ms;
107 double _recorded_non_young_cset_choice_time_ms;
108
109 double _recorded_redirty_logged_cards_time_ms;
110
111 double _recorded_young_free_cset_time_ms;
112 double _recorded_non_young_free_cset_time_ms;
113
114 double _cur_fast_reclaim_humongous_time_ms;
115 double _cur_fast_reclaim_humongous_register_time_ms;
116 size_t _cur_fast_reclaim_humongous_total;
117 size_t _cur_fast_reclaim_humongous_candidates;
118 size_t _cur_fast_reclaim_humongous_reclaimed;
119
120 double _cur_verify_before_time_ms;
121 double _cur_verify_after_time_ms;
122
123 // Helper methods for detailed logging
124 void print_stats(const char*, const char* str, double value);
125
126 void note_gc_end();
127
128 public:
129 G1GCPhaseTimes(uint max_gc_threads);
130 void note_gc_start(uint active_gc_threads);
131 void print();
132
133 // record the time a phase took in seconds
134 void record_time_secs(GCParPhases phase, uint worker_i, double secs);
135
136 // add a number of seconds to a phase
137 void add_time_secs(GCParPhases phase, uint worker_i, double secs);
138
139 void record_thread_work_item(GCParPhases phase, uint worker_i, size_t count);
140
141 // return the average time for a phase in milliseconds
142 double average_time_ms(GCParPhases phase);
143
144 size_t sum_thread_work_items(GCParPhases phase);
|
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_G1_G1GCPHASETIMES_HPP
26 #define SHARE_VM_GC_G1_G1GCPHASETIMES_HPP
27
28 #include "memory/allocation.hpp"
29
30 class LineBuffer;
31
32 template <class T> class WorkerDataArray;
33
34 class G1GCPhaseTimes : public CHeapObj<mtGC> {
35 uint _active_gc_threads;
36 uint _max_gc_threads;
37 jlong _gc_start_counter;
38 double _gc_pause_time_ms;
39
40 public:
41 enum GCParPhases {
42 GCWorkerStart,
43 ExtRootScan,
44 ThreadRoots,
45 StringTableRoots,
46 UniverseRoots,
47 JNIRoots,
48 ObjectSynchronizerRoots,
49 FlatProfilerRoots,
50 ManagementRoots,
51 SystemDictionaryRoots,
52 CLDGRoots,
53 JVMTIRoots,
54 CMRefRoots,
102 double _external_accounted_time_ms;
103
104 double _recorded_young_cset_choice_time_ms;
105 double _recorded_non_young_cset_choice_time_ms;
106
107 double _recorded_redirty_logged_cards_time_ms;
108
109 double _recorded_young_free_cset_time_ms;
110 double _recorded_non_young_free_cset_time_ms;
111
112 double _cur_fast_reclaim_humongous_time_ms;
113 double _cur_fast_reclaim_humongous_register_time_ms;
114 size_t _cur_fast_reclaim_humongous_total;
115 size_t _cur_fast_reclaim_humongous_candidates;
116 size_t _cur_fast_reclaim_humongous_reclaimed;
117
118 double _cur_verify_before_time_ms;
119 double _cur_verify_after_time_ms;
120
121 // Helper methods for detailed logging
122 void info_line(const char* str, double value);
123 void debug_line(const char* str, double value);
124 void trace_line(const char* str, double value);
125 void trace_line(const char* str, size_t value);
126 void trace_phase_tasks(const char* indent, G1GCPhaseTimes::GCParPhases phase_id);
127 void trace_phase_counts(const char* indent, G1GCPhaseTimes::GCParPhases phase_id);
128 void debug_phase(G1GCPhaseTimes::GCParPhases phase_id);
129 void trace_phase(G1GCPhaseTimes::GCParPhases phase_id);
130 void trace_phase_no_sum(G1GCPhaseTimes::GCParPhases phase_id);
131
132 void note_gc_end();
133
134 public:
135 G1GCPhaseTimes(uint max_gc_threads);
136 void note_gc_start(uint active_gc_threads);
137 void print();
138
139 // record the time a phase took in seconds
140 void record_time_secs(GCParPhases phase, uint worker_i, double secs);
141
142 // add a number of seconds to a phase
143 void add_time_secs(GCParPhases phase, uint worker_i, double secs);
144
145 void record_thread_work_item(GCParPhases phase, uint worker_i, size_t count);
146
147 // return the average time for a phase in milliseconds
148 double average_time_ms(GCParPhases phase);
149
150 size_t sum_thread_work_items(GCParPhases phase);
|