annotate src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp @ 4155:394404b2d9bd

Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
author Doug Simon <doug.simon@oracle.com>
date Wed, 21 Dec 2011 11:25:27 +0100
parents 8229bd737950
children b5290bf0a9e4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
1 /*
b52782ae3880 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.
b52782ae3880 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.
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
4 *
b52782ae3880 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
b52782ae3880 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
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
7 * published by the Free Software Foundation.
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
8 *
b52782ae3880 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
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b52782ae3880 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
b52782ae3880 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
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
13 * accompanied this code).
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
14 *
b52782ae3880 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
b52782ae3880 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,
b52782ae3880 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.
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
18 *
b52782ae3880 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
b52782ae3880 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
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
21 * questions.
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
22 *
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
23 */
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
24
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
25 #include "precompiled.hpp"
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
26 #include "gc_implementation/g1/g1MonitoringSupport.hpp"
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
27 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
28 #include "gc_implementation/g1/g1CollectorPolicy.hpp"
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
29
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
30 G1GenerationCounters::G1GenerationCounters(G1MonitoringSupport* g1mm,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
31 const char* name,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
32 int ordinal, int spaces,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
33 size_t min_capacity,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
34 size_t max_capacity,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
35 size_t curr_capacity)
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
36 : GenerationCounters(name, ordinal, spaces, min_capacity,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
37 max_capacity, curr_capacity), _g1mm(g1mm) { }
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
38
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
39 // We pad the capacity three times given that the young generation
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
40 // contains three spaces (eden and two survivors).
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
41 G1YoungGenerationCounters::G1YoungGenerationCounters(G1MonitoringSupport* g1mm,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
42 const char* name)
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
43 : G1GenerationCounters(g1mm, name, 0 /* ordinal */, 3 /* spaces */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
44 G1MonitoringSupport::pad_capacity(0, 3) /* min_capacity */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
45 G1MonitoringSupport::pad_capacity(g1mm->young_gen_max(), 3),
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
46 G1MonitoringSupport::pad_capacity(0, 3) /* curr_capacity */) {
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
47 update_all();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
48 }
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
49
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
50 G1OldGenerationCounters::G1OldGenerationCounters(G1MonitoringSupport* g1mm,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
51 const char* name)
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
52 : G1GenerationCounters(g1mm, name, 1 /* ordinal */, 1 /* spaces */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
53 G1MonitoringSupport::pad_capacity(0) /* min_capacity */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
54 G1MonitoringSupport::pad_capacity(g1mm->old_gen_max()),
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
55 G1MonitoringSupport::pad_capacity(0) /* curr_capacity */) {
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
56 update_all();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
57 }
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
58
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
59 void G1YoungGenerationCounters::update_all() {
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
60 size_t committed =
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
61 G1MonitoringSupport::pad_capacity(_g1mm->young_gen_committed(), 3);
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
62 _current_size->set_value(committed);
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
63 }
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
64
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
65 void G1OldGenerationCounters::update_all() {
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
66 size_t committed =
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
67 G1MonitoringSupport::pad_capacity(_g1mm->old_gen_committed());
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
68 _current_size->set_value(committed);
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
69 }
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
70
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
71 G1MonitoringSupport::G1MonitoringSupport(G1CollectedHeap* g1h) :
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
72 _g1h(g1h),
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
73 _incremental_collection_counters(NULL),
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
74 _full_collection_counters(NULL),
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
75 _old_collection_counters(NULL),
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
76 _old_space_counters(NULL),
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
77 _young_collection_counters(NULL),
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
78 _eden_counters(NULL),
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
79 _from_counters(NULL),
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
80 _to_counters(NULL),
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
81
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
82 _overall_reserved(0),
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
83 _overall_committed(0), _overall_used(0),
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
84 _young_region_num(0),
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
85 _young_gen_committed(0),
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
86 _eden_committed(0), _eden_used(0),
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
87 _survivor_committed(0), _survivor_used(0),
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
88 _old_committed(0), _old_used(0) {
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
89
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
90 _overall_reserved = g1h->max_capacity();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
91 recalculate_sizes();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
92
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
93 // Counters for GC collections
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
94 //
b52782ae3880 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
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
96 // young generation collection.
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
97 _incremental_collection_counters =
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
98 new CollectorCounters("G1 incremental collections", 0);
b52782ae3880 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
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
100 // old generation collection.
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
101 _full_collection_counters =
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
102 new CollectorCounters("G1 stop-the-world full collections", 1);
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
103
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
104 // timer sampling for all counters supporting sampling only update the
b52782ae3880 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
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
106 // capacity updated so sampling is not currently used. It might
b52782ae3880 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
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
108 // take_sample() only returns "used". When sampling was used, there
b52782ae3880 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
b52782ae3880 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
b52782ae3880 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
b52782ae3880 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
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
113 // the collector when the sample is being done?).
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
114 const bool sampled = false;
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
115
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
116 // "Generation" and "Space" counters.
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
117 //
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
118 // name "generation.1" This is logically the old generation in
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
119 // generational GC terms. The "1, 1" parameters are for
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
120 // the n-th generation (=1) with 1 space.
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
121 // Counters are created from minCapacity, maxCapacity, and capacity
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
122 _old_collection_counters = new G1OldGenerationCounters(this, "old");
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
123
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
124 // name "generation.1.space.0"
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
125 // Counters are created from maxCapacity, capacity, initCapacity,
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
126 // and used.
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
127 _old_space_counters = new HSpaceCounters("space", 0 /* ordinal */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
128 pad_capacity(overall_reserved()) /* max_capacity */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
129 pad_capacity(old_space_committed()) /* init_capacity */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
130 _old_collection_counters);
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
131
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
132 // Young collection set
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
133 // name "generation.0". This is logically the young generation.
b52782ae3880 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.
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
135 // See _old_collection_counters for additional counters
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
136 _young_collection_counters = new G1YoungGenerationCounters(this, "young");
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
137
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
138 // name "generation.0.space.0"
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
139 // See _old_space_counters for additional counters
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
140 _eden_counters = new HSpaceCounters("eden", 0 /* ordinal */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
141 pad_capacity(overall_reserved()) /* max_capacity */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
142 pad_capacity(eden_space_committed()) /* init_capacity */,
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
143 _young_collection_counters);
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
144
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
145 // name "generation.0.space.1"
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
146 // See _old_space_counters for additional counters
b52782ae3880 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.
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
148 _from_counters = new HSpaceCounters("s0", 1 /* ordinal */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
149 pad_capacity(0) /* max_capacity */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
150 pad_capacity(0) /* init_capacity */,
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
151 _young_collection_counters);
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
152 // Given that this survivor space is not used, we update it here
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
153 // once to reflect that its used space is 0 so that we don't have to
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
154 // worry about updating it again later.
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
155 _from_counters->update_used(0);
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
156
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
157 // name "generation.0.space.2"
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
158 // See _old_space_counters for additional counters
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
159 _to_counters = new HSpaceCounters("s1", 2 /* ordinal */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
160 pad_capacity(overall_reserved()) /* max_capacity */,
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
161 pad_capacity(survivor_space_committed()) /* init_capacity */,
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
162 _young_collection_counters);
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
163 }
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
164
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
165 void G1MonitoringSupport::recalculate_sizes() {
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
166 G1CollectedHeap* g1 = g1h();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
167
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
168 // Recalculate all the sizes from scratch. We assume that this is
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
169 // called at a point where no concurrent updates to the various
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
170 // values we read here are possible (i.e., at a STW phase at the end
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
171 // of a GC).
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
172
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
173 size_t young_list_length = g1->young_list()->length();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
174 size_t survivor_list_length = g1->g1_policy()->recorded_survivor_regions();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
175 assert(young_list_length >= survivor_list_length, "invariant");
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
176 size_t eden_list_length = young_list_length - survivor_list_length;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
177 // Max length includes any potential extensions to the young gen
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
178 // we'll do when the GC locker is active.
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
179 size_t young_list_max_length = g1->g1_policy()->young_list_max_length();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
180 assert(young_list_max_length >= survivor_list_length, "invariant");
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
181 size_t eden_list_max_length = young_list_max_length - survivor_list_length;
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
182
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
183 _overall_used = g1->used_unlocked();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
184 _eden_used = eden_list_length * HeapRegion::GrainBytes;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
185 _survivor_used = survivor_list_length * HeapRegion::GrainBytes;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
186 _young_region_num = young_list_length;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
187 _old_used = subtract_up_to_zero(_overall_used, _eden_used + _survivor_used);
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
188
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
189 // First calculate the committed sizes that can be calculated independently.
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
190 _survivor_committed = _survivor_used;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
191 _old_committed = HeapRegion::align_up_to_region_byte_size(_old_used);
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
192
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
193 // Next, start with the overall committed size.
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
194 _overall_committed = g1->capacity();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
195 size_t committed = _overall_committed;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
196
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
197 // Remove the committed size we have calculated so far (for the
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
198 // survivor and old space).
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
199 assert(committed >= (_survivor_committed + _old_committed), "sanity");
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
200 committed -= _survivor_committed + _old_committed;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
201
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
202 // Next, calculate and remove the committed size for the eden.
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
203 _eden_committed = eden_list_max_length * HeapRegion::GrainBytes;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
204 // Somewhat defensive: be robust in case there are inaccuracies in
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
205 // the calculations
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
206 _eden_committed = MIN2(_eden_committed, committed);
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
207 committed -= _eden_committed;
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
208
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
209 // Finally, give the rest to the old space...
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
210 _old_committed += committed;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
211 // ..and calculate the young gen committed.
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
212 _young_gen_committed = _eden_committed + _survivor_committed;
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
213
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
214 assert(_overall_committed ==
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
215 (_eden_committed + _survivor_committed + _old_committed),
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
216 "the committed sizes should add up");
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
217 // Somewhat defensive: cap the eden used size to make sure it
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
218 // never exceeds the committed size.
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
219 _eden_used = MIN2(_eden_used, _eden_committed);
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
220 // _survivor_committed and _old_committed are calculated in terms of
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
221 // the corresponding _*_used value, so the next two conditions
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
222 // should hold.
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
223 assert(_survivor_used <= _survivor_committed, "post-condition");
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
224 assert(_old_used <= _old_committed, "post-condition");
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
225 }
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
226
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
227 void G1MonitoringSupport::recalculate_eden_size() {
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
228 G1CollectedHeap* g1 = g1h();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
229
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
230 // When a new eden region is allocated, only the eden_used size is
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
231 // affected (since we have recalculated everything else at the last GC).
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
232
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
233 size_t young_region_num = g1h()->young_list()->length();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
234 if (young_region_num > _young_region_num) {
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
235 size_t diff = young_region_num - _young_region_num;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
236 _eden_used += diff * HeapRegion::GrainBytes;
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
237 // Somewhat defensive: cap the eden used size to make sure it
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
238 // never exceeds the committed size.
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
239 _eden_used = MIN2(_eden_used, _eden_committed);
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
240 _young_region_num = young_region_num;
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
241 }
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
242 }
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
243
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
244 void G1MonitoringSupport::update_sizes() {
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
245 recalculate_sizes();
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
246 if (UsePerfData) {
3980
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
247 eden_counters()->update_capacity(pad_capacity(eden_space_committed()));
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
248 eden_counters()->update_used(eden_space_used());
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
249 // only the to survivor space (s1) is active, so we don't need to
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
250 // update the counteres for the from survivor space (s0)
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
251 to_counters()->update_capacity(pad_capacity(survivor_space_committed()));
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
252 to_counters()->update_used(survivor_space_used());
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
253 old_space_counters()->update_capacity(pad_capacity(old_space_committed()));
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
254 old_space_counters()->update_used(old_space_used());
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
255 old_collection_counters()->update_all();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
256 young_collection_counters()->update_all();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
257 }
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
258 }
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
259
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
260 void G1MonitoringSupport::update_eden_size() {
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
261 recalculate_eden_size();
8229bd737950 7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents: 3289
diff changeset
262 if (UsePerfData) {
3289
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
263 eden_counters()->update_used(eden_space_used());
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
264 }
b52782ae3880 6946417: G1: Java VisualVM does not support G1 properly.
jmasa
parents:
diff changeset
265 }