hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp
author tonyp
Wed, 25 Jan 2012 12:58:23 -0500
changeset 11584 e1df4d08a1f4
parent 10671 431ff8629f97
child 12096 c9ee3caeda27
permissions -rw-r--r--
7127706: G1: re-enable survivors during the initial-mark pause Summary: Re-enable survivors during the initial-mark pause. Afterwards, the concurrent marking threads have to scan them and mark everything reachable from them. The next GC will have to wait for the survivors to be scanned. Reviewed-by: brutisso, johnc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
     1
/*
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
     2
 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
     4
 *
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
     7
 * published by the Free Software Foundation.
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
     8
 *
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    13
 * accompanied this code).
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    14
 *
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    18
 *
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    21
 * questions.
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    22
 *
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    23
 */
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    24
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    25
#include "precompiled.hpp"
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    26
#include "gc_implementation/g1/g1MonitoringSupport.hpp"
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    27
#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    28
#include "gc_implementation/g1/g1CollectorPolicy.hpp"
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    29
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    30
G1GenerationCounters::G1GenerationCounters(G1MonitoringSupport* g1mm,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    31
                                           const char* name,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    32
                                           int ordinal, int spaces,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    33
                                           size_t min_capacity,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    34
                                           size_t max_capacity,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    35
                                           size_t curr_capacity)
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    36
  : GenerationCounters(name, ordinal, spaces, min_capacity,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    37
                       max_capacity, curr_capacity), _g1mm(g1mm) { }
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    38
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    39
// We pad the capacity three times given that the young generation
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    40
// contains three spaces (eden and two survivors).
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    41
G1YoungGenerationCounters::G1YoungGenerationCounters(G1MonitoringSupport* g1mm,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    42
                                                     const char* name)
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    43
  : G1GenerationCounters(g1mm, name, 0 /* ordinal */, 3 /* spaces */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    44
               G1MonitoringSupport::pad_capacity(0, 3) /* min_capacity */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    45
               G1MonitoringSupport::pad_capacity(g1mm->young_gen_max(), 3),
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    46
               G1MonitoringSupport::pad_capacity(0, 3) /* curr_capacity */) {
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    47
  update_all();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    48
}
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    49
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    50
G1OldGenerationCounters::G1OldGenerationCounters(G1MonitoringSupport* g1mm,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    51
                                                 const char* name)
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    52
  : G1GenerationCounters(g1mm, name, 1 /* ordinal */, 1 /* spaces */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    53
               G1MonitoringSupport::pad_capacity(0) /* min_capacity */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    54
               G1MonitoringSupport::pad_capacity(g1mm->old_gen_max()),
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    55
               G1MonitoringSupport::pad_capacity(0) /* curr_capacity */) {
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    56
  update_all();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    57
}
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    58
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    59
void G1YoungGenerationCounters::update_all() {
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    60
  size_t committed =
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    61
            G1MonitoringSupport::pad_capacity(_g1mm->young_gen_committed(), 3);
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    62
  _current_size->set_value(committed);
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    63
}
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    64
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    65
void G1OldGenerationCounters::update_all() {
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    66
  size_t committed =
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    67
            G1MonitoringSupport::pad_capacity(_g1mm->old_gen_committed());
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    68
  _current_size->set_value(committed);
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    69
}
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    70
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    71
G1MonitoringSupport::G1MonitoringSupport(G1CollectedHeap* g1h) :
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    72
  _g1h(g1h),
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    73
  _incremental_collection_counters(NULL),
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    74
  _full_collection_counters(NULL),
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    75
  _old_collection_counters(NULL),
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    76
  _old_space_counters(NULL),
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    77
  _young_collection_counters(NULL),
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    78
  _eden_counters(NULL),
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    79
  _from_counters(NULL),
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    80
  _to_counters(NULL),
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    81
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    82
  _overall_reserved(0),
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    83
  _overall_committed(0),    _overall_used(0),
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    84
  _young_region_num(0),
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    85
  _young_gen_committed(0),
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    86
  _eden_committed(0),       _eden_used(0),
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    87
  _survivor_committed(0),   _survivor_used(0),
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    88
  _old_committed(0),        _old_used(0) {
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    89
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    90
  _overall_reserved = g1h->max_capacity();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    91
  recalculate_sizes();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
    92
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    93
  // Counters for GC collections
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    94
  //
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    95
  //  name "collector.0".  In a generational collector this would be the
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    96
  // young generation collection.
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    97
  _incremental_collection_counters =
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    98
    new CollectorCounters("G1 incremental collections", 0);
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
    99
  //   name "collector.1".  In a generational collector this would be the
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   100
  // old generation collection.
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   101
  _full_collection_counters =
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   102
    new CollectorCounters("G1 stop-the-world full collections", 1);
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   103
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   104
  // timer sampling for all counters supporting sampling only update the
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   105
  // used value.  See the take_sample() method.  G1 requires both used and
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   106
  // capacity updated so sampling is not currently used.  It might
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   107
  // be sufficient to update all counters in take_sample() even though
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   108
  // take_sample() only returns "used".  When sampling was used, there
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   109
  // were some anomolous values emitted which may have been the consequence
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   110
  // of not updating all values simultaneously (i.e., see the calculation done
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   111
  // in eden_space_used(), is it possbile that the values used to
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   112
  // calculate either eden_used or survivor_used are being updated by
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   113
  // the collector when the sample is being done?).
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   114
  const bool sampled = false;
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   115
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   116
  // "Generation" and "Space" counters.
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   117
  //
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   118
  //  name "generation.1" This is logically the old generation in
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   119
  // generational GC terms.  The "1, 1" parameters are for
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   120
  // the n-th generation (=1) with 1 space.
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   121
  // Counters are created from minCapacity, maxCapacity, and capacity
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   122
  _old_collection_counters = new G1OldGenerationCounters(this, "old");
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   123
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   124
  //  name  "generation.1.space.0"
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   125
  // Counters are created from maxCapacity, capacity, initCapacity,
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   126
  // and used.
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   127
  _old_space_counters = new HSpaceCounters("space", 0 /* ordinal */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   128
    pad_capacity(overall_reserved()) /* max_capacity */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   129
    pad_capacity(old_space_committed()) /* init_capacity */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   130
   _old_collection_counters);
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   131
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   132
  //   Young collection set
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   133
  //  name "generation.0".  This is logically the young generation.
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   134
  //  The "0, 3" are paremeters for the n-th genertaion (=0) with 3 spaces.
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   135
  // See  _old_collection_counters for additional counters
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   136
  _young_collection_counters = new G1YoungGenerationCounters(this, "young");
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   137
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   138
  //  name "generation.0.space.0"
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   139
  // See _old_space_counters for additional counters
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   140
  _eden_counters = new HSpaceCounters("eden", 0 /* ordinal */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   141
    pad_capacity(overall_reserved()) /* max_capacity */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   142
    pad_capacity(eden_space_committed()) /* init_capacity */,
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   143
    _young_collection_counters);
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   144
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   145
  //  name "generation.0.space.1"
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   146
  // See _old_space_counters for additional counters
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   147
  // Set the arguments to indicate that this survivor space is not used.
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   148
  _from_counters = new HSpaceCounters("s0", 1 /* ordinal */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   149
    pad_capacity(0) /* max_capacity */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   150
    pad_capacity(0) /* init_capacity */,
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   151
    _young_collection_counters);
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   152
  // Given that this survivor space is not used, we update it here
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   153
  // once to reflect that its used space is 0 so that we don't have to
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   154
  // worry about updating it again later.
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   155
  _from_counters->update_used(0);
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   156
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   157
  //  name "generation.0.space.2"
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   158
  // See _old_space_counters for additional counters
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   159
  _to_counters = new HSpaceCounters("s1", 2 /* ordinal */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   160
    pad_capacity(overall_reserved()) /* max_capacity */,
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   161
    pad_capacity(survivor_space_committed()) /* init_capacity */,
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   162
    _young_collection_counters);
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   163
}
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   164
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   165
void G1MonitoringSupport::recalculate_sizes() {
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   166
  G1CollectedHeap* g1 = g1h();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   167
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   168
  // Recalculate all the sizes from scratch. We assume that this is
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   169
  // called at a point where no concurrent updates to the various
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   170
  // values we read here are possible (i.e., at a STW phase at the end
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   171
  // of a GC).
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   172
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   173
  size_t young_list_length = g1->young_list()->length();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   174
  size_t survivor_list_length = g1->g1_policy()->recorded_survivor_regions();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   175
  assert(young_list_length >= survivor_list_length, "invariant");
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   176
  size_t eden_list_length = young_list_length - survivor_list_length;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   177
  // Max length includes any potential extensions to the young gen
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   178
  // we'll do when the GC locker is active.
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   179
  size_t young_list_max_length = g1->g1_policy()->young_list_max_length();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   180
  assert(young_list_max_length >= survivor_list_length, "invariant");
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   181
  size_t eden_list_max_length = young_list_max_length - survivor_list_length;
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   182
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   183
  _overall_used = g1->used_unlocked();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   184
  _eden_used = eden_list_length * HeapRegion::GrainBytes;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   185
  _survivor_used = survivor_list_length * HeapRegion::GrainBytes;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   186
  _young_region_num = young_list_length;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   187
  _old_used = subtract_up_to_zero(_overall_used, _eden_used + _survivor_used);
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   188
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   189
  // First calculate the committed sizes that can be calculated independently.
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   190
  _survivor_committed = _survivor_used;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   191
  _old_committed = HeapRegion::align_up_to_region_byte_size(_old_used);
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   192
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   193
  // Next, start with the overall committed size.
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   194
  _overall_committed = g1->capacity();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   195
  size_t committed = _overall_committed;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   196
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   197
  // Remove the committed size we have calculated so far (for the
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   198
  // survivor and old space).
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   199
  assert(committed >= (_survivor_committed + _old_committed), "sanity");
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   200
  committed -= _survivor_committed + _old_committed;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   201
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   202
  // Next, calculate and remove the committed size for the eden.
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   203
  _eden_committed = eden_list_max_length * HeapRegion::GrainBytes;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   204
  // Somewhat defensive: be robust in case there are inaccuracies in
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   205
  // the calculations
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   206
  _eden_committed = MIN2(_eden_committed, committed);
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   207
  committed -= _eden_committed;
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   208
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   209
  // Finally, give the rest to the old space...
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   210
  _old_committed += committed;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   211
  // ..and calculate the young gen committed.
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   212
  _young_gen_committed = _eden_committed + _survivor_committed;
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   213
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   214
  assert(_overall_committed ==
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   215
         (_eden_committed + _survivor_committed + _old_committed),
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   216
         "the committed sizes should add up");
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   217
  // Somewhat defensive: cap the eden used size to make sure it
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   218
  // never exceeds the committed size.
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   219
  _eden_used = MIN2(_eden_used, _eden_committed);
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   220
  // _survivor_committed and _old_committed are calculated in terms of
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   221
  // the corresponding _*_used value, so the next two conditions
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   222
  // should hold.
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   223
  assert(_survivor_used <= _survivor_committed, "post-condition");
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   224
  assert(_old_used <= _old_committed, "post-condition");
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   225
}
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   226
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   227
void G1MonitoringSupport::recalculate_eden_size() {
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   228
  G1CollectedHeap* g1 = g1h();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   229
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   230
  // When a new eden region is allocated, only the eden_used size is
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   231
  // affected (since we have recalculated everything else at the last GC).
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   232
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   233
  size_t young_region_num = g1h()->young_list()->length();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   234
  if (young_region_num > _young_region_num) {
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   235
    size_t diff = young_region_num - _young_region_num;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   236
    _eden_used += diff * HeapRegion::GrainBytes;
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   237
    // Somewhat defensive: cap the eden used size to make sure it
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   238
    // never exceeds the committed size.
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   239
    _eden_used = MIN2(_eden_used, _eden_committed);
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   240
    _young_region_num = young_region_num;
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   241
  }
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   242
}
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   243
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   244
void G1MonitoringSupport::update_sizes() {
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   245
  recalculate_sizes();
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   246
  if (UsePerfData) {
10671
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   247
    eden_counters()->update_capacity(pad_capacity(eden_space_committed()));
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   248
    eden_counters()->update_used(eden_space_used());
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   249
    // only the to survivor space (s1) is active, so we don't need to
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   250
    // update the counteres for the from survivor space (s0)
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   251
    to_counters()->update_capacity(pad_capacity(survivor_space_committed()));
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   252
    to_counters()->update_used(survivor_space_used());
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   253
    old_space_counters()->update_capacity(pad_capacity(old_space_committed()));
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   254
    old_space_counters()->update_used(old_space_used());
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   255
    old_collection_counters()->update_all();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   256
    young_collection_counters()->update_all();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   257
  }
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   258
}
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   259
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   260
void G1MonitoringSupport::update_eden_size() {
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   261
  recalculate_eden_size();
431ff8629f97 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 9338
diff changeset
   262
  if (UsePerfData) {
9338
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   263
    eden_counters()->update_used(eden_space_used());
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   264
  }
05ee447bd420 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
   265
}