author | tonyp |
Wed, 21 Dec 2011 07:53:53 -0500 | |
changeset 11395 | 33260c27554b |
parent 11249 | b0c1cc35cafe |
child 11579 | 6c94c23b3199 |
permissions | -rw-r--r-- |
9338 | 1 |
/* |
2 |
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. |
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
4 |
* |
|
5 |
* This code is free software; you can redistribute it and/or modify it |
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
|
7 |
* published by the Free Software Foundation. |
|
8 |
* |
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
|
13 |
* accompanied this code). |
|
14 |
* |
|
15 |
* You should have received a copy of the GNU General Public License version |
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
18 |
* |
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
20 |
* or visit www.oracle.com if you need additional information or have any |
|
21 |
* questions. |
|
22 |
* |
|
23 |
*/ |
|
24 |
||
25 |
#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1MONITORINGSUPPORT_HPP |
|
26 |
#define SHARE_VM_GC_IMPLEMENTATION_G1_G1MONITORINGSUPPORT_HPP |
|
27 |
||
28 |
#include "gc_implementation/shared/hSpaceCounters.hpp" |
|
29 |
||
30 |
class G1CollectedHeap; |
|
31 |
||
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
32 |
// Class for monitoring logical spaces in G1. It provides data for |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
33 |
// both G1's jstat counters as well as G1's memory pools. |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
34 |
// |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
35 |
// G1 splits the heap into heap regions and each heap region belongs |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
36 |
// to one of the following categories: |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
37 |
// |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
38 |
// * eden : regions that have been allocated since the last GC |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
39 |
// * survivors : regions with objects that survived the last few GCs |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
40 |
// * old : long-lived non-humongous regions |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
41 |
// * humongous : humongous regions |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
42 |
// * free : free regions |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
43 |
// |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
44 |
// The combination of eden and survivor regions form the equivalent of |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
45 |
// the young generation in the other GCs. The combination of old and |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
46 |
// humongous regions form the equivalent of the old generation in the |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
47 |
// other GCs. Free regions do not have a good equivalent in the other |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
48 |
// GCs given that they can be allocated as any of the other region types. |
9338 | 49 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
50 |
// The monitoring tools expect the heap to contain a number of |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
51 |
// generations (young, old, perm) and each generation to contain a |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
52 |
// number of spaces (young: eden, survivors, old). Given that G1 does |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
53 |
// not maintain those spaces physically (e.g., the set of |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
54 |
// non-contiguous eden regions can be considered as a "logical" |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
55 |
// space), we'll provide the illusion that those generations and |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
56 |
// spaces exist. In reality, each generation and space refers to a set |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
57 |
// of heap regions that are potentially non-contiguous. |
9338 | 58 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
59 |
// This class provides interfaces to access the min, current, and max |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
60 |
// capacity and current occupancy for each of G1's logical spaces and |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
61 |
// generations we expose to the monitoring tools. Also provided are |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
62 |
// counters for G1 concurrent collections and stop-the-world full heap |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
63 |
// collections. |
9338 | 64 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
65 |
// Below is a description of how the various sizes are calculated. |
9338 | 66 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
67 |
// * Current Capacity |
9338 | 68 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
69 |
// - heap_capacity = current heap capacity (e.g., current committed size) |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
70 |
// - young_gen_capacity = current max young gen target capacity |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
71 |
// (i.e., young gen target capacity + max allowed expansion capacity) |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
72 |
// - survivor_capacity = current survivor region capacity |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
73 |
// - eden_capacity = young_gen_capacity - survivor_capacity |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
74 |
// - old_capacity = heap_capacity - young_gen_capacity |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
75 |
// |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
76 |
// What we do in the above is to distribute the free regions among |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
77 |
// eden_capacity and old_capacity. |
9338 | 78 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
79 |
// * Occupancy |
9338 | 80 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
81 |
// - young_gen_used = current young region capacity |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
82 |
// - survivor_used = survivor_capacity |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
83 |
// - eden_used = young_gen_used - survivor_used |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
84 |
// - old_used = overall_used - young_gen_used |
9338 | 85 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
86 |
// Unfortunately, we currently only keep track of the number of |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
87 |
// currently allocated young and survivor regions + the overall used |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
88 |
// bytes in the heap, so the above can be a little inaccurate. |
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 |
// * Min Capacity |
9338 | 91 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
92 |
// We set this to 0 for all spaces. We could consider setting the old |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
93 |
// min capacity to the min capacity of the heap (see 7078465). |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
94 |
// |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
95 |
// * Max Capacity |
9338 | 96 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
97 |
// For jstat, we set the max capacity of all spaces to heap_capacity, |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
98 |
// given that we don't always have a reasonably upper bound on how big |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
99 |
// each space can grow. For the memory pools, we actually make the max |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
100 |
// capacity undefined. We could consider setting the old max capacity |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
101 |
// to the max capacity of the heap (see 7078465). |
9338 | 102 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
103 |
// If we had more accurate occupancy / capacity information per |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
104 |
// region set the above calculations would be greatly simplified and |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
105 |
// be made more accurate. |
9338 | 106 |
// |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
107 |
// We update all the above synchronously and we store the results in |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
108 |
// fields so that we just read said fields when needed. A subtle point |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
109 |
// is that all the above sizes need to be recalculated when the old |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
110 |
// gen changes capacity (after a GC or after a humongous allocation) |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
111 |
// but only the eden occupancy changes when a new eden region is |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
112 |
// allocated. So, in the latter case we have minimal recalcuation to |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
113 |
// do which is important as we want to keep the eden region allocation |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
114 |
// path as low-overhead as possible. |
9338 | 115 |
|
116 |
class G1MonitoringSupport : public CHeapObj { |
|
10675
8b887b2cb116
7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents:
10671
diff
changeset
|
117 |
friend class VMStructs; |
8b887b2cb116
7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents:
10671
diff
changeset
|
118 |
|
9338 | 119 |
G1CollectedHeap* _g1h; |
120 |
||
121 |
// jstat performance counters |
|
11249 | 122 |
// incremental collections both young and mixed |
9338 | 123 |
CollectorCounters* _incremental_collection_counters; |
124 |
// full stop-the-world collections |
|
125 |
CollectorCounters* _full_collection_counters; |
|
126 |
// young collection set counters. The _eden_counters, |
|
127 |
// _from_counters, and _to_counters are associated with |
|
128 |
// this "generational" counter. |
|
129 |
GenerationCounters* _young_collection_counters; |
|
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
130 |
// old collection set counters. The _old_space_counters |
9338 | 131 |
// below are associated with this "generational" counter. |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
132 |
GenerationCounters* _old_collection_counters; |
9338 | 133 |
// Counters for the capacity and used for |
134 |
// the whole heap |
|
135 |
HSpaceCounters* _old_space_counters; |
|
136 |
// the young collection |
|
137 |
HSpaceCounters* _eden_counters; |
|
138 |
// the survivor collection (only one, _to_counters, is actively used) |
|
139 |
HSpaceCounters* _from_counters; |
|
140 |
HSpaceCounters* _to_counters; |
|
141 |
||
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
142 |
// When it's appropriate to recalculate the various sizes (at the |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
143 |
// end of a GC, when a new eden region is allocated, etc.) we store |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
144 |
// them here so that we can easily report them when needed and not |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
145 |
// have to recalculate them every time. |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
146 |
|
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
147 |
size_t _overall_reserved; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
148 |
size_t _overall_committed; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
149 |
size_t _overall_used; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
150 |
|
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
151 |
size_t _young_region_num; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
152 |
size_t _young_gen_committed; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
153 |
size_t _eden_committed; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
154 |
size_t _eden_used; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
155 |
size_t _survivor_committed; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
156 |
size_t _survivor_used; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
157 |
|
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
158 |
size_t _old_committed; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
159 |
size_t _old_used; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
160 |
|
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
161 |
G1CollectedHeap* g1h() { return _g1h; } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
162 |
|
9338 | 163 |
// It returns x - y if x > y, 0 otherwise. |
164 |
// As described in the comment above, some of the inputs to the |
|
165 |
// calculations we have to do are obtained concurrently and hence |
|
166 |
// may be inconsistent with each other. So, this provides a |
|
167 |
// defensive way of performing the subtraction and avoids the value |
|
168 |
// going negative (which would mean a very large result, given that |
|
169 |
// the parameter are size_t). |
|
170 |
static size_t subtract_up_to_zero(size_t x, size_t y) { |
|
171 |
if (x > y) { |
|
172 |
return x - y; |
|
173 |
} else { |
|
174 |
return 0; |
|
175 |
} |
|
176 |
} |
|
177 |
||
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
178 |
// Recalculate all the sizes. |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
179 |
void recalculate_sizes(); |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
180 |
// Recalculate only what's necessary when a new eden region is allocated. |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
181 |
void recalculate_eden_size(); |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
182 |
|
9338 | 183 |
public: |
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
184 |
G1MonitoringSupport(G1CollectedHeap* g1h); |
9338 | 185 |
|
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
186 |
// Unfortunately, the jstat tool assumes that no space has 0 |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
187 |
// capacity. In our case, given that each space is logical, it's |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
188 |
// possible that no regions will be allocated to it, hence to have 0 |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
189 |
// capacity (e.g., if there are no survivor regions, the survivor |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
190 |
// space has 0 capacity). The way we deal with this is to always pad |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
191 |
// each capacity value we report to jstat by a very small amount to |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
192 |
// make sure that it's never zero. Given that we sometimes have to |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
193 |
// report a capacity of a generation that contains several spaces |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
194 |
// (e.g., young gen includes one eden, two survivor spaces), the |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
195 |
// mult parameter is provided in order to adding the appropriate |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
196 |
// padding multiple times so that the capacities add up correctly. |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
197 |
static size_t pad_capacity(size_t size_bytes, size_t mult = 1) { |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
198 |
return size_bytes + MinObjAlignmentInBytes * mult; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
199 |
} |
9338 | 200 |
|
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
201 |
// Recalculate all the sizes from scratch and update all the jstat |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
202 |
// counters accordingly. |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
203 |
void update_sizes(); |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
204 |
// Recalculate only what's necessary when a new eden region is |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
205 |
// allocated and update any jstat counters that need to be updated. |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
206 |
void update_eden_size(); |
9338 | 207 |
|
208 |
CollectorCounters* incremental_collection_counters() { |
|
209 |
return _incremental_collection_counters; |
|
210 |
} |
|
211 |
CollectorCounters* full_collection_counters() { |
|
212 |
return _full_collection_counters; |
|
213 |
} |
|
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
214 |
GenerationCounters* young_collection_counters() { |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
215 |
return _young_collection_counters; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
216 |
} |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
217 |
GenerationCounters* old_collection_counters() { |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
218 |
return _old_collection_counters; |
9338 | 219 |
} |
220 |
HSpaceCounters* old_space_counters() { return _old_space_counters; } |
|
221 |
HSpaceCounters* eden_counters() { return _eden_counters; } |
|
222 |
HSpaceCounters* from_counters() { return _from_counters; } |
|
223 |
HSpaceCounters* to_counters() { return _to_counters; } |
|
224 |
||
225 |
// Monitoring support used by |
|
226 |
// MemoryService |
|
227 |
// jstat counters |
|
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
228 |
|
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
229 |
size_t overall_reserved() { return _overall_reserved; } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
230 |
size_t overall_committed() { return _overall_committed; } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
231 |
size_t overall_used() { return _overall_used; } |
9338 | 232 |
|
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
233 |
size_t young_gen_committed() { return _young_gen_committed; } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
234 |
size_t young_gen_max() { return overall_reserved(); } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
235 |
size_t eden_space_committed() { return _eden_committed; } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
236 |
size_t eden_space_used() { return _eden_used; } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
237 |
size_t survivor_space_committed() { return _survivor_committed; } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
238 |
size_t survivor_space_used() { return _survivor_used; } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
239 |
|
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
240 |
size_t old_gen_committed() { return old_space_committed(); } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
241 |
size_t old_gen_max() { return overall_reserved(); } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
242 |
size_t old_space_committed() { return _old_committed; } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
243 |
size_t old_space_used() { return _old_used; } |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
244 |
}; |
9338 | 245 |
|
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
246 |
class G1GenerationCounters: public GenerationCounters { |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
247 |
protected: |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
248 |
G1MonitoringSupport* _g1mm; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
249 |
|
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
250 |
public: |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
251 |
G1GenerationCounters(G1MonitoringSupport* g1mm, |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
252 |
const char* name, int ordinal, int spaces, |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
253 |
size_t min_capacity, size_t max_capacity, |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
254 |
size_t curr_capacity); |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
255 |
}; |
9338 | 256 |
|
10671
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
257 |
class G1YoungGenerationCounters: public G1GenerationCounters { |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
258 |
public: |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
259 |
G1YoungGenerationCounters(G1MonitoringSupport* g1mm, const char* name); |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
260 |
virtual void update_all(); |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
261 |
}; |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
262 |
|
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
263 |
class G1OldGenerationCounters: public G1GenerationCounters { |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
264 |
public: |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
265 |
G1OldGenerationCounters(G1MonitoringSupport* g1mm, const char* name); |
431ff8629f97
7075646: G1: fix inconsistencies in the monitoring data
tonyp
parents:
9338
diff
changeset
|
266 |
virtual void update_all(); |
9338 | 267 |
}; |
268 |
||
269 |
#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1MONITORINGSUPPORT_HPP |