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