src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp

Tue, 30 Sep 2014 09:44:36 +0200

author
tschatzl
date
Tue, 30 Sep 2014 09:44:36 +0200
changeset 7218
6948da6d7c13
parent 7208
7baf47cb97cb
child 7535
7ae4e26cb1e0
child 7658
c3fcc09c9239
permissions
-rw-r--r--

8052172: Evacuation failure handling in G1 does not evacuate all objects if -XX:-G1DeferredRSUpdate is set
Summary: Remove -XX:-G1DeferredRSUpdate functionality as it is racy. During evacuation failure handling, threads where evacuation failure handling occurred may try to add remembered sets to regions which remembered sets are currently being scanned. The iterator to handle the remembered set scan does not support addition of entries during scan and so may skip valid references.
Reviewed-by: iveresov, brutisso, mgerdin

brutisso@3923 1 /*
tschatzl@6402 2 * Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved.
brutisso@3923 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
brutisso@3923 4 *
brutisso@3923 5 * This code is free software; you can redistribute it and/or modify it
brutisso@3923 6 * under the terms of the GNU General Public License version 2 only, as
brutisso@3923 7 * published by the Free Software Foundation.
brutisso@3923 8 *
brutisso@3923 9 * This code is distributed in the hope that it will be useful, but WITHOUT
brutisso@3923 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
brutisso@3923 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
brutisso@3923 12 * version 2 for more details (a copy is included in the LICENSE file that
brutisso@3923 13 * accompanied this code).
brutisso@3923 14 *
brutisso@3923 15 * You should have received a copy of the GNU General Public License version
brutisso@3923 16 * 2 along with this work; if not, write to the Free Software Foundation,
brutisso@3923 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
brutisso@3923 18 *
brutisso@3923 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
brutisso@3923 20 * or visit www.oracle.com if you need additional information or have any
brutisso@3923 21 * questions.
brutisso@3923 22 *
brutisso@3923 23 */
brutisso@3923 24
brutisso@3923 25
brutisso@3923 26 #include "precompiled.hpp"
brutisso@3923 27 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
brutisso@3923 28 #include "gc_implementation/g1/g1GCPhaseTimes.hpp"
brutisso@3923 29 #include "gc_implementation/g1/g1Log.hpp"
pliden@6413 30 #include "gc_implementation/g1/g1StringDedup.hpp"
brutisso@3923 31
brutisso@3923 32 // Helper class for avoiding interleaved logging
brutisso@3923 33 class LineBuffer: public StackObj {
brutisso@3923 34
brutisso@3923 35 private:
brutisso@3923 36 static const int BUFFER_LEN = 1024;
brutisso@3923 37 static const int INDENT_CHARS = 3;
brutisso@3923 38 char _buffer[BUFFER_LEN];
brutisso@3923 39 int _indent_level;
brutisso@3923 40 int _cur;
brutisso@3923 41
drchase@6680 42 void vappend(const char* format, va_list ap) ATTRIBUTE_PRINTF(2, 0) {
brutisso@3923 43 int res = vsnprintf(&_buffer[_cur], BUFFER_LEN - _cur, format, ap);
brutisso@3923 44 if (res != -1) {
brutisso@3923 45 _cur += res;
brutisso@3923 46 } else {
brutisso@3923 47 DEBUG_ONLY(warning("buffer too small in LineBuffer");)
brutisso@3923 48 _buffer[BUFFER_LEN -1] = 0;
brutisso@3923 49 _cur = BUFFER_LEN; // vsnprintf above should not add to _buffer if we are called again
brutisso@3923 50 }
brutisso@3923 51 }
brutisso@3923 52
brutisso@3923 53 public:
brutisso@3923 54 explicit LineBuffer(int indent_level): _indent_level(indent_level), _cur(0) {
brutisso@3923 55 for (; (_cur < BUFFER_LEN && _cur < (_indent_level * INDENT_CHARS)); _cur++) {
brutisso@3923 56 _buffer[_cur] = ' ';
brutisso@3923 57 }
brutisso@3923 58 }
brutisso@3923 59
brutisso@3923 60 #ifndef PRODUCT
brutisso@3923 61 ~LineBuffer() {
brutisso@3923 62 assert(_cur == _indent_level * INDENT_CHARS, "pending data in buffer - append_and_print_cr() not called?");
brutisso@3923 63 }
brutisso@3923 64 #endif
brutisso@3923 65
drchase@6680 66 void append(const char* format, ...) ATTRIBUTE_PRINTF(2, 3) {
brutisso@3923 67 va_list ap;
brutisso@3923 68 va_start(ap, format);
brutisso@3923 69 vappend(format, ap);
brutisso@3923 70 va_end(ap);
brutisso@3923 71 }
brutisso@3923 72
drchase@6680 73 void append_and_print_cr(const char* format, ...) ATTRIBUTE_PRINTF(2, 3) {
brutisso@3923 74 va_list ap;
brutisso@3923 75 va_start(ap, format);
brutisso@3923 76 vappend(format, ap);
brutisso@3923 77 va_end(ap);
brutisso@3923 78 gclog_or_tty->print_cr("%s", _buffer);
brutisso@3923 79 _cur = _indent_level * INDENT_CHARS;
brutisso@3923 80 }
brutisso@3923 81 };
brutisso@3923 82
drchase@6680 83 PRAGMA_DIAG_PUSH
drchase@6680 84 PRAGMA_FORMAT_NONLITERAL_IGNORED
brutisso@4015 85 template <class T>
brutisso@4015 86 void WorkerDataArray<T>::print(int level, const char* title) {
brutisso@4015 87 if (_length == 1) {
brutisso@4015 88 // No need for min, max, average and sum for only one worker
brutisso@4015 89 LineBuffer buf(level);
brutisso@4015 90 buf.append("[%s: ", title);
brutisso@4015 91 buf.append(_print_format, _data[0]);
brutisso@4015 92 buf.append_and_print_cr("]");
brutisso@4015 93 return;
brutisso@4015 94 }
brutisso@4015 95
brutisso@4015 96 T min = _data[0];
brutisso@4015 97 T max = _data[0];
brutisso@4015 98 T sum = 0;
brutisso@4015 99
brutisso@4015 100 LineBuffer buf(level);
brutisso@4015 101 buf.append("[%s:", title);
brutisso@4015 102 for (uint i = 0; i < _length; ++i) {
brutisso@4015 103 T val = _data[i];
brutisso@4015 104 min = MIN2(val, min);
brutisso@4015 105 max = MAX2(val, max);
brutisso@4015 106 sum += val;
brutisso@4015 107 if (G1Log::finest()) {
brutisso@4015 108 buf.append(" ");
brutisso@4015 109 buf.append(_print_format, val);
brutisso@4015 110 }
brutisso@4015 111 }
brutisso@4015 112
brutisso@4015 113 if (G1Log::finest()) {
drchase@6680 114 buf.append_and_print_cr("%s", "");
brutisso@4015 115 }
brutisso@4015 116
brutisso@4015 117 double avg = (double)sum / (double)_length;
brutisso@4015 118 buf.append(" Min: ");
brutisso@4015 119 buf.append(_print_format, min);
brutisso@4015 120 buf.append(", Avg: ");
brutisso@4015 121 buf.append("%.1lf", avg); // Always print average as a double
brutisso@4015 122 buf.append(", Max: ");
brutisso@4015 123 buf.append(_print_format, max);
brutisso@4015 124 buf.append(", Diff: ");
brutisso@4015 125 buf.append(_print_format, max - min);
brutisso@4015 126 if (_print_sum) {
brutisso@4015 127 // for things like the start and end times the sum is not
brutisso@4015 128 // that relevant
brutisso@4015 129 buf.append(", Sum: ");
brutisso@4015 130 buf.append(_print_format, sum);
brutisso@4015 131 }
brutisso@4015 132 buf.append_and_print_cr("]");
brutisso@4015 133 }
drchase@6680 134 PRAGMA_DIAG_POP
brutisso@4015 135
jmasa@4097 136 #ifndef PRODUCT
brutisso@4015 137
brutisso@4475 138 template <> const int WorkerDataArray<int>::_uninitialized = -1;
brutisso@4475 139 template <> const double WorkerDataArray<double>::_uninitialized = -1.0;
brutisso@4475 140 template <> const size_t WorkerDataArray<size_t>::_uninitialized = (size_t)-1;
brutisso@4475 141
brutisso@4015 142 template <class T>
brutisso@4015 143 void WorkerDataArray<T>::reset() {
brutisso@4015 144 for (uint i = 0; i < _length; i++) {
brutisso@4475 145 _data[i] = (T)_uninitialized;
brutisso@4015 146 }
brutisso@4015 147 }
brutisso@4015 148
brutisso@4015 149 template <class T>
brutisso@4015 150 void WorkerDataArray<T>::verify() {
brutisso@4015 151 for (uint i = 0; i < _length; i++) {
brutisso@4475 152 assert(_data[i] != _uninitialized,
brutisso@4475 153 err_msg("Invalid data for worker " UINT32_FORMAT ", data: %lf, uninitialized: %lf",
brutisso@4475 154 i, (double)_data[i], (double)_uninitialized));
brutisso@4015 155 }
brutisso@4015 156 }
brutisso@4015 157
brutisso@4015 158 #endif
brutisso@4015 159
brutisso@3923 160 G1GCPhaseTimes::G1GCPhaseTimes(uint max_gc_threads) :
brutisso@3923 161 _max_gc_threads(max_gc_threads),
brutisso@4015 162 _last_gc_worker_start_times_ms(_max_gc_threads, "%.1lf", false),
brutisso@4015 163 _last_ext_root_scan_times_ms(_max_gc_threads, "%.1lf"),
brutisso@4015 164 _last_satb_filtering_times_ms(_max_gc_threads, "%.1lf"),
brutisso@4015 165 _last_update_rs_times_ms(_max_gc_threads, "%.1lf"),
brutisso@4015 166 _last_update_rs_processed_buffers(_max_gc_threads, "%d"),
brutisso@4015 167 _last_scan_rs_times_ms(_max_gc_threads, "%.1lf"),
johnc@5548 168 _last_strong_code_root_scan_times_ms(_max_gc_threads, "%.1lf"),
brutisso@4015 169 _last_obj_copy_times_ms(_max_gc_threads, "%.1lf"),
brutisso@4015 170 _last_termination_times_ms(_max_gc_threads, "%.1lf"),
brutisso@4015 171 _last_termination_attempts(_max_gc_threads, SIZE_FORMAT),
brutisso@4015 172 _last_gc_worker_end_times_ms(_max_gc_threads, "%.1lf", false),
brutisso@4015 173 _last_gc_worker_times_ms(_max_gc_threads, "%.1lf"),
pliden@6413 174 _last_gc_worker_other_times_ms(_max_gc_threads, "%.1lf"),
tschatzl@6930 175 _last_redirty_logged_cards_time_ms(_max_gc_threads, "%.1lf"),
tschatzl@6930 176 _last_redirty_logged_cards_processed_cards(_max_gc_threads, SIZE_FORMAT),
pliden@6413 177 _cur_string_dedup_queue_fixup_worker_times_ms(_max_gc_threads, "%.1lf"),
pliden@6413 178 _cur_string_dedup_table_fixup_worker_times_ms(_max_gc_threads, "%.1lf")
brutisso@3923 179 {
brutisso@3923 180 assert(max_gc_threads > 0, "Must have some GC threads");
brutisso@3923 181 }
brutisso@3923 182
brutisso@4015 183 void G1GCPhaseTimes::note_gc_start(uint active_gc_threads) {
brutisso@3923 184 assert(active_gc_threads > 0, "The number of threads must be > 0");
brutisso@3923 185 assert(active_gc_threads <= _max_gc_threads, "The number of active threads must be <= the max nubmer of threads");
brutisso@3923 186 _active_gc_threads = active_gc_threads;
brutisso@3923 187
brutisso@4015 188 _last_gc_worker_start_times_ms.reset();
brutisso@4015 189 _last_ext_root_scan_times_ms.reset();
brutisso@4015 190 _last_satb_filtering_times_ms.reset();
brutisso@4015 191 _last_update_rs_times_ms.reset();
brutisso@4015 192 _last_update_rs_processed_buffers.reset();
brutisso@4015 193 _last_scan_rs_times_ms.reset();
johnc@5548 194 _last_strong_code_root_scan_times_ms.reset();
brutisso@4015 195 _last_obj_copy_times_ms.reset();
brutisso@4015 196 _last_termination_times_ms.reset();
brutisso@4015 197 _last_termination_attempts.reset();
brutisso@4015 198 _last_gc_worker_end_times_ms.reset();
brutisso@4015 199 _last_gc_worker_times_ms.reset();
brutisso@4015 200 _last_gc_worker_other_times_ms.reset();
tschatzl@6930 201
tschatzl@6930 202 _last_redirty_logged_cards_time_ms.reset();
tschatzl@6930 203 _last_redirty_logged_cards_processed_cards.reset();
tschatzl@6930 204
brutisso@3923 205 }
brutisso@3923 206
brutisso@4015 207 void G1GCPhaseTimes::note_gc_end() {
brutisso@4015 208 _last_gc_worker_start_times_ms.verify();
brutisso@4015 209 _last_ext_root_scan_times_ms.verify();
brutisso@4015 210 _last_satb_filtering_times_ms.verify();
brutisso@4015 211 _last_update_rs_times_ms.verify();
brutisso@4015 212 _last_update_rs_processed_buffers.verify();
brutisso@4015 213 _last_scan_rs_times_ms.verify();
johnc@5548 214 _last_strong_code_root_scan_times_ms.verify();
brutisso@4015 215 _last_obj_copy_times_ms.verify();
brutisso@4015 216 _last_termination_times_ms.verify();
brutisso@4015 217 _last_termination_attempts.verify();
brutisso@4015 218 _last_gc_worker_end_times_ms.verify();
brutisso@3923 219
brutisso@4475 220 for (uint i = 0; i < _active_gc_threads; i++) {
brutisso@4475 221 double worker_time = _last_gc_worker_end_times_ms.get(i) - _last_gc_worker_start_times_ms.get(i);
brutisso@4475 222 _last_gc_worker_times_ms.set(i, worker_time);
brutisso@3923 223
brutisso@4475 224 double worker_known_time = _last_ext_root_scan_times_ms.get(i) +
johnc@5078 225 _last_satb_filtering_times_ms.get(i) +
johnc@5078 226 _last_update_rs_times_ms.get(i) +
johnc@5078 227 _last_scan_rs_times_ms.get(i) +
johnc@5548 228 _last_strong_code_root_scan_times_ms.get(i) +
johnc@5078 229 _last_obj_copy_times_ms.get(i) +
johnc@5078 230 _last_termination_times_ms.get(i);
brutisso@3923 231
brutisso@4475 232 double worker_other_time = worker_time - worker_known_time;
brutisso@4475 233 _last_gc_worker_other_times_ms.set(i, worker_other_time);
brutisso@4475 234 }
brutisso@3923 235
brutisso@4015 236 _last_gc_worker_times_ms.verify();
brutisso@4015 237 _last_gc_worker_other_times_ms.verify();
tschatzl@6930 238
tschatzl@7218 239 _last_redirty_logged_cards_time_ms.verify();
tschatzl@7218 240 _last_redirty_logged_cards_processed_cards.verify();
brutisso@3923 241 }
brutisso@3923 242
pliden@6413 243 void G1GCPhaseTimes::note_string_dedup_fixup_start() {
pliden@6413 244 _cur_string_dedup_queue_fixup_worker_times_ms.reset();
pliden@6413 245 _cur_string_dedup_table_fixup_worker_times_ms.reset();
pliden@6413 246 }
pliden@6413 247
pliden@6413 248 void G1GCPhaseTimes::note_string_dedup_fixup_end() {
pliden@6413 249 _cur_string_dedup_queue_fixup_worker_times_ms.verify();
pliden@6413 250 _cur_string_dedup_table_fixup_worker_times_ms.verify();
pliden@6413 251 }
pliden@6413 252
brutisso@3923 253 void G1GCPhaseTimes::print_stats(int level, const char* str, double value) {
brutisso@3923 254 LineBuffer(level).append_and_print_cr("[%s: %.1lf ms]", str, value);
brutisso@3923 255 }
brutisso@3923 256
tschatzl@7010 257 void G1GCPhaseTimes::print_stats(int level, const char* str, size_t value) {
tschatzl@7010 258 LineBuffer(level).append_and_print_cr("[%s: "SIZE_FORMAT"]", str, value);
tschatzl@7010 259 }
tschatzl@7010 260
vkempik@6552 261 void G1GCPhaseTimes::print_stats(int level, const char* str, double value, uint workers) {
vkempik@6552 262 LineBuffer(level).append_and_print_cr("[%s: %.1lf ms, GC Workers: " UINT32_FORMAT "]", str, value, workers);
brutisso@3923 263 }
brutisso@3923 264
brutisso@3923 265 double G1GCPhaseTimes::accounted_time_ms() {
brutisso@3923 266 // Subtract the root region scanning wait time. It's initialized to
brutisso@3923 267 // zero at the start of the pause.
brutisso@3923 268 double misc_time_ms = _root_region_scan_wait_time_ms;
brutisso@3923 269
brutisso@3923 270 misc_time_ms += _cur_collection_par_time_ms;
brutisso@3923 271
brutisso@3923 272 // Now subtract the time taken to fix up roots in generated code
brutisso@3923 273 misc_time_ms += _cur_collection_code_root_fixup_time_ms;
brutisso@3923 274
tschatzl@6402 275 // Strong code root purge time
tschatzl@6402 276 misc_time_ms += _cur_strong_code_root_purge_time_ms;
tschatzl@6402 277
pliden@6413 278 if (G1StringDedup::is_enabled()) {
pliden@6413 279 // String dedup fixup time
pliden@6413 280 misc_time_ms += _cur_string_dedup_fixup_time_ms;
pliden@6413 281 }
pliden@6413 282
brutisso@3923 283 // Subtract the time taken to clean the card table from the
brutisso@3923 284 // current value of "other time"
brutisso@3923 285 misc_time_ms += _cur_clear_ct_time_ms;
brutisso@3923 286
brutisso@3923 287 return misc_time_ms;
brutisso@3923 288 }
brutisso@3923 289
brutisso@4015 290 void G1GCPhaseTimes::print(double pause_time_sec) {
brutisso@3923 291 if (_root_region_scan_wait_time_ms > 0.0) {
brutisso@3923 292 print_stats(1, "Root Region Scan Waiting", _root_region_scan_wait_time_ms);
brutisso@3923 293 }
brutisso@3923 294 if (G1CollectedHeap::use_parallel_gc_threads()) {
brutisso@3923 295 print_stats(1, "Parallel Time", _cur_collection_par_time_ms, _active_gc_threads);
brutisso@4015 296 _last_gc_worker_start_times_ms.print(2, "GC Worker Start (ms)");
brutisso@4015 297 _last_ext_root_scan_times_ms.print(2, "Ext Root Scanning (ms)");
brutisso@4015 298 if (_last_satb_filtering_times_ms.sum() > 0.0) {
brutisso@4015 299 _last_satb_filtering_times_ms.print(2, "SATB Filtering (ms)");
brutisso@3923 300 }
brutisso@4015 301 _last_update_rs_times_ms.print(2, "Update RS (ms)");
brutisso@4015 302 _last_update_rs_processed_buffers.print(3, "Processed Buffers");
brutisso@4015 303 _last_scan_rs_times_ms.print(2, "Scan RS (ms)");
johnc@5548 304 _last_strong_code_root_scan_times_ms.print(2, "Code Root Scanning (ms)");
brutisso@4015 305 _last_obj_copy_times_ms.print(2, "Object Copy (ms)");
brutisso@4015 306 _last_termination_times_ms.print(2, "Termination (ms)");
brutisso@3923 307 if (G1Log::finest()) {
brutisso@4015 308 _last_termination_attempts.print(3, "Termination Attempts");
brutisso@3923 309 }
brutisso@4015 310 _last_gc_worker_other_times_ms.print(2, "GC Worker Other (ms)");
brutisso@4015 311 _last_gc_worker_times_ms.print(2, "GC Worker Total (ms)");
brutisso@4015 312 _last_gc_worker_end_times_ms.print(2, "GC Worker End (ms)");
brutisso@4015 313 } else {
brutisso@4015 314 _last_ext_root_scan_times_ms.print(1, "Ext Root Scanning (ms)");
brutisso@4015 315 if (_last_satb_filtering_times_ms.sum() > 0.0) {
brutisso@4015 316 _last_satb_filtering_times_ms.print(1, "SATB Filtering (ms)");
brutisso@3923 317 }
brutisso@4015 318 _last_update_rs_times_ms.print(1, "Update RS (ms)");
brutisso@4015 319 _last_update_rs_processed_buffers.print(2, "Processed Buffers");
brutisso@4015 320 _last_scan_rs_times_ms.print(1, "Scan RS (ms)");
johnc@5548 321 _last_strong_code_root_scan_times_ms.print(1, "Code Root Scanning (ms)");
brutisso@4015 322 _last_obj_copy_times_ms.print(1, "Object Copy (ms)");
brutisso@3923 323 }
brutisso@3923 324 print_stats(1, "Code Root Fixup", _cur_collection_code_root_fixup_time_ms);
tschatzl@6402 325 print_stats(1, "Code Root Purge", _cur_strong_code_root_purge_time_ms);
pliden@6413 326 if (G1StringDedup::is_enabled()) {
pliden@6413 327 print_stats(1, "String Dedup Fixup", _cur_string_dedup_fixup_time_ms, _active_gc_threads);
pliden@6413 328 _cur_string_dedup_queue_fixup_worker_times_ms.print(2, "Queue Fixup (ms)");
pliden@6413 329 _cur_string_dedup_table_fixup_worker_times_ms.print(2, "Table Fixup (ms)");
pliden@6413 330 }
brutisso@3923 331 print_stats(1, "Clear CT", _cur_clear_ct_time_ms);
brutisso@4015 332 double misc_time_ms = pause_time_sec * MILLIUNITS - accounted_time_ms();
brutisso@3923 333 print_stats(1, "Other", misc_time_ms);
brutisso@4015 334 if (_cur_verify_before_time_ms > 0.0) {
brutisso@4015 335 print_stats(2, "Verify Before", _cur_verify_before_time_ms);
brutisso@4015 336 }
tschatzl@6406 337 if (G1CollectedHeap::heap()->evacuation_failed()) {
tschatzl@6406 338 double evac_fail_handling = _cur_evac_fail_recalc_used + _cur_evac_fail_remove_self_forwards +
tschatzl@6406 339 _cur_evac_fail_restore_remsets;
tschatzl@6406 340 print_stats(2, "Evacuation Failure", evac_fail_handling);
tschatzl@6406 341 if (G1Log::finest()) {
tschatzl@6406 342 print_stats(3, "Recalculate Used", _cur_evac_fail_recalc_used);
tschatzl@6406 343 print_stats(3, "Remove Self Forwards", _cur_evac_fail_remove_self_forwards);
tschatzl@6406 344 print_stats(3, "Restore RemSet", _cur_evac_fail_restore_remsets);
tschatzl@6406 345 }
tschatzl@6406 346 }
brutisso@3923 347 print_stats(2, "Choose CSet",
brutisso@3923 348 (_recorded_young_cset_choice_time_ms +
brutisso@3923 349 _recorded_non_young_cset_choice_time_ms));
brutisso@3923 350 print_stats(2, "Ref Proc", _cur_ref_proc_time_ms);
brutisso@3923 351 print_stats(2, "Ref Enq", _cur_ref_enq_time_ms);
tschatzl@7218 352 print_stats(2, "Redirty Cards", _recorded_redirty_logged_cards_time_ms);
tschatzl@7218 353 if (G1Log::finest()) {
tschatzl@7218 354 _last_redirty_logged_cards_time_ms.print(3, "Parallel Redirty");
tschatzl@7218 355 _last_redirty_logged_cards_processed_cards.print(3, "Redirtied Cards");
tschatzl@6405 356 }
tschatzl@7010 357 if (G1ReclaimDeadHumongousObjectsAtYoungGC) {
tschatzl@7010 358 print_stats(2, "Humongous Reclaim", _cur_fast_reclaim_humongous_time_ms);
tschatzl@7010 359 if (G1Log::finest()) {
tschatzl@7010 360 print_stats(3, "Humongous Total", _cur_fast_reclaim_humongous_total);
tschatzl@7010 361 print_stats(3, "Humongous Candidate", _cur_fast_reclaim_humongous_candidates);
tschatzl@7010 362 print_stats(3, "Humongous Reclaimed", _cur_fast_reclaim_humongous_reclaimed);
tschatzl@7010 363 }
tschatzl@7010 364 }
brutisso@3923 365 print_stats(2, "Free CSet",
brutisso@3923 366 (_recorded_young_free_cset_time_ms +
brutisso@3923 367 _recorded_non_young_free_cset_time_ms));
tschatzl@6404 368 if (G1Log::finest()) {
tschatzl@6404 369 print_stats(3, "Young Free CSet", _recorded_young_free_cset_time_ms);
tschatzl@6404 370 print_stats(3, "Non-Young Free CSet", _recorded_non_young_free_cset_time_ms);
tschatzl@6404 371 }
brutisso@4015 372 if (_cur_verify_after_time_ms > 0.0) {
brutisso@4015 373 print_stats(2, "Verify After", _cur_verify_after_time_ms);
brutisso@4015 374 }
brutisso@3923 375 }

mercurial