annotate src/share/vm/memory/heapInspection.hpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents 78bbf4d43a14
children 52b4284cb496
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 12823
diff changeset
2 * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 615
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 615
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 615
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
25 #ifndef SHARE_VM_MEMORY_HEAPINSPECTION_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26 #define SHARE_VM_MEMORY_HEAPINSPECTION_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
28 #include "memory/allocation.inline.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
29 #include "oops/oop.inline.hpp"
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
30 #include "oops/annotations.hpp"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6854
diff changeset
31 #include "utilities/macros.hpp"
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
32
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
33 #if INCLUDE_SERVICES
0
a61af66fc99e Initial load
duke
parents:
diff changeset
34
a61af66fc99e Initial load
duke
parents:
diff changeset
35
a61af66fc99e Initial load
duke
parents:
diff changeset
36 // HeapInspection
a61af66fc99e Initial load
duke
parents:
diff changeset
37
a61af66fc99e Initial load
duke
parents:
diff changeset
38 // KlassInfoTable is a bucket hash table that
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
39 // maps Klass*s to extra information:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
40 // instance count and instance word size.
a61af66fc99e Initial load
duke
parents:
diff changeset
41 //
a61af66fc99e Initial load
duke
parents:
diff changeset
42 // A KlassInfoBucket is the head of a link list
a61af66fc99e Initial load
duke
parents:
diff changeset
43 // of KlassInfoEntry's
a61af66fc99e Initial load
duke
parents:
diff changeset
44 //
a61af66fc99e Initial load
duke
parents:
diff changeset
45 // KlassInfoHisto is a growable array of pointers
a61af66fc99e Initial load
duke
parents:
diff changeset
46 // to KlassInfoEntry's and is used to sort
a61af66fc99e Initial load
duke
parents:
diff changeset
47 // the entries.
a61af66fc99e Initial load
duke
parents:
diff changeset
48
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
49 #define HEAP_INSPECTION_COLUMNS_DO(f) \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
50 f(inst_size, InstSize, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
51 "Size of each object instance of the Java class") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
52 f(inst_count, InstCount, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
53 "Number of object instances of the Java class") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
54 f(inst_bytes, InstBytes, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
55 "This is usually (InstSize * InstNum). The only exception is " \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
56 "java.lang.Class, whose InstBytes also includes the slots " \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
57 "used to store static fields. InstBytes is not counted in " \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
58 "ROAll, RWAll or Total") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
59 f(mirror_bytes, Mirror, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
60 "Size of the Klass::java_mirror() object") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
61 f(klass_bytes, KlassBytes, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
62 "Size of the InstanceKlass or ArrayKlass for this class. " \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
63 "Note that this includes VTab, ITab, OopMap") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
64 f(secondary_supers_bytes, K_secondary_supers, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
65 "Number of bytes used by the Klass::secondary_supers() array") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
66 f(vtab_bytes, VTab, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
67 "Size of the embedded vtable in InstanceKlass") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
68 f(itab_bytes, ITab, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
69 "Size of the embedded itable in InstanceKlass") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
70 f(nonstatic_oopmap_bytes, OopMap, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
71 "Size of the embedded nonstatic_oop_map in InstanceKlass") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
72 f(methods_array_bytes, IK_methods, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
73 "Number of bytes used by the InstanceKlass::methods() array") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
74 f(method_ordering_bytes, IK_method_ordering, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
75 "Number of bytes used by the InstanceKlass::method_ordering() array") \
12823
ac9cb1d5a202 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 12316
diff changeset
76 f(default_methods_array_bytes, IK_default_methods, \
ac9cb1d5a202 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 12316
diff changeset
77 "Number of bytes used by the InstanceKlass::default_methods() array") \
ac9cb1d5a202 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 12316
diff changeset
78 f(default_vtable_indices_bytes, IK_default_vtable_indices, \
ac9cb1d5a202 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 12316
diff changeset
79 "Number of bytes used by the InstanceKlass::default_vtable_indices() array") \
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
80 f(local_interfaces_bytes, IK_local_interfaces, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
81 "Number of bytes used by the InstanceKlass::local_interfaces() array") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
82 f(transitive_interfaces_bytes, IK_transitive_interfaces, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
83 "Number of bytes used by the InstanceKlass::transitive_interfaces() array") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
84 f(fields_bytes, IK_fields, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
85 "Number of bytes used by the InstanceKlass::fields() array") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
86 f(inner_classes_bytes, IK_inner_classes, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
87 "Number of bytes used by the InstanceKlass::inner_classes() array") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
88 f(signers_bytes, IK_signers, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
89 "Number of bytes used by the InstanceKlass::singers() array") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
90 f(class_annotations_bytes, class_annotations, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
91 "Size of class annotations") \
8031
927a311d00f9 8007320: NPG: move method annotations
coleenp
parents: 8003
diff changeset
92 f(class_type_annotations_bytes, class_type_annotations, \
927a311d00f9 8007320: NPG: move method annotations
coleenp
parents: 8003
diff changeset
93 "Size of class type annotations") \
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
94 f(fields_annotations_bytes, fields_annotations, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
95 "Size of field annotations") \
8031
927a311d00f9 8007320: NPG: move method annotations
coleenp
parents: 8003
diff changeset
96 f(fields_type_annotations_bytes, fields_type_annotations, \
927a311d00f9 8007320: NPG: move method annotations
coleenp
parents: 8003
diff changeset
97 "Size of field type annotations") \
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
98 f(methods_annotations_bytes, methods_annotations, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
99 "Size of method annotations") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
100 f(methods_parameter_annotations_bytes, methods_parameter_annotations, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
101 "Size of method parameter annotations") \
8031
927a311d00f9 8007320: NPG: move method annotations
coleenp
parents: 8003
diff changeset
102 f(methods_type_annotations_bytes, methods_type_annotations, \
927a311d00f9 8007320: NPG: move method annotations
coleenp
parents: 8003
diff changeset
103 "Size of methods type annotations") \
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
104 f(methods_default_annotations_bytes, methods_default_annotations, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
105 "Size of methods default annotations") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
106 f(annotations_bytes, annotations, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
107 "Size of all annotations") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
108 f(cp_bytes, Cp, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
109 "Size of InstanceKlass::constants()") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
110 f(cp_tags_bytes, CpTags, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
111 "Size of InstanceKlass::constants()->tags()") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
112 f(cp_cache_bytes, CpCache, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
113 "Size of InstanceKlass::constants()->cache()") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
114 f(cp_operands_bytes, CpOperands, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
115 "Size of InstanceKlass::constants()->operands()") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
116 f(cp_refmap_bytes, CpRefMap, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
117 "Size of InstanceKlass::constants()->reference_map()") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
118 f(cp_all_bytes, CpAll, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
119 "Sum of Cp + CpTags + CpCache + CpOperands + CpRefMap") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
120 f(method_count, MethodCount, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
121 "Number of methods in this class") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
122 f(method_bytes, MethodBytes, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
123 "Size of the Method object") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
124 f(const_method_bytes, ConstMethod, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
125 "Size of the ConstMethod object") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
126 f(method_data_bytes, MethodData, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
127 "Size of the MethodData object") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
128 f(stackmap_bytes, StackMap, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
129 "Size of the stackmap_data") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
130 f(bytecode_bytes, Bytecodes, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
131 "Of the MethodBytes column, how much are the space taken up by bytecodes") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
132 f(method_all_bytes, MethodAll, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
133 "Sum of MethodBytes + Constmethod + Stackmap + Methoddata") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
134 f(ro_bytes, ROAll, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
135 "Size of all class meta data that could (potentially) be placed " \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
136 "in read-only memory. (This could change with CDS design)") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
137 f(rw_bytes, RWAll, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
138 "Size of all class meta data that must be placed in read/write " \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
139 "memory. (This could change with CDS design) ") \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
140 f(total_bytes, Total, \
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
141 "ROAll + RWAll. Note that this does NOT include InstBytes.")
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
142
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
143 // Size statistics for a Klass - filled in by Klass::collect_statistics()
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
144 class KlassSizeStats {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
145 public:
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
146 #define COUNT_KLASS_SIZE_STATS_FIELD(field, name, help) _index_ ## field,
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
147 #define DECLARE_KLASS_SIZE_STATS_FIELD(field, name, help) julong _ ## field;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
148
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
149 enum {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
150 HEAP_INSPECTION_COLUMNS_DO(COUNT_KLASS_SIZE_STATS_FIELD)
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
151 _num_columns
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
152 };
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
153
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
154 HEAP_INSPECTION_COLUMNS_DO(DECLARE_KLASS_SIZE_STATS_FIELD)
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
155
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
156 static int count(oop x) {
12316
190899198332 7195622: CheckUnhandledOops has limited usefulness now
hseigel
parents: 11113
diff changeset
157 return (HeapWordSize * (((x) != NULL) ? (x)->size() : 0));
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
158 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
159
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
160 static int count_array(objArrayOop x) {
12316
190899198332 7195622: CheckUnhandledOops has limited usefulness now
hseigel
parents: 11113
diff changeset
161 return (HeapWordSize * (((x) != NULL) ? (x)->size() : 0));
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
162 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
163
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
164 template <class T> static int count(T* x) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
165 return (HeapWordSize * ((x) ? (x)->size() : 0));
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
166 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
167
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
168 template <class T> static int count_array(T* x) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
169 if (x == NULL) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
170 return 0;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
171 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
172 if (x->length() == 0) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
173 // This is a shared array, e.g., Universe::the_empty_int_array(). Don't
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
174 // count it to avoid double-counting.
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
175 return 0;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
176 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
177 return HeapWordSize * x->size();
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
178 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
179 };
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
180
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
181
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
182
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
183
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 1972
diff changeset
184 class KlassInfoEntry: public CHeapObj<mtInternal> {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
185 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
186 KlassInfoEntry* _next;
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
187 Klass* _klass;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
188 long _instance_count;
a61af66fc99e Initial load
duke
parents:
diff changeset
189 size_t _instance_words;
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
190 long _index;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
191
a61af66fc99e Initial load
duke
parents:
diff changeset
192 public:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
193 KlassInfoEntry(Klass* k, KlassInfoEntry* next) :
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
194 _klass(k), _instance_count(0), _instance_words(0), _next(next), _index(-1)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
195 {}
10265
92ef81e2f571 8003557: NPG: Klass* const k should be const Klass* k.
minqi
parents: 8031
diff changeset
196 KlassInfoEntry* next() const { return _next; }
92ef81e2f571 8003557: NPG: Klass* const k should be const Klass* k.
minqi
parents: 8031
diff changeset
197 bool is_equal(const Klass* k) { return k == _klass; }
92ef81e2f571 8003557: NPG: Klass* const k should be const Klass* k.
minqi
parents: 8031
diff changeset
198 Klass* klass() const { return _klass; }
92ef81e2f571 8003557: NPG: Klass* const k should be const Klass* k.
minqi
parents: 8031
diff changeset
199 long count() const { return _instance_count; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
200 void set_count(long ct) { _instance_count = ct; }
10265
92ef81e2f571 8003557: NPG: Klass* const k should be const Klass* k.
minqi
parents: 8031
diff changeset
201 size_t words() const { return _instance_words; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
202 void set_words(size_t wds) { _instance_words = wds; }
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
203 void set_index(long index) { _index = index; }
10265
92ef81e2f571 8003557: NPG: Klass* const k should be const Klass* k.
minqi
parents: 8031
diff changeset
204 long index() const { return _index; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
205 int compare(KlassInfoEntry* e1, KlassInfoEntry* e2);
a61af66fc99e Initial load
duke
parents:
diff changeset
206 void print_on(outputStream* st) const;
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
207 const char* name() const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
208 };
a61af66fc99e Initial load
duke
parents:
diff changeset
209
11113
2cbc8f3011a0 8015972: Refactor the sending of the object count after GC event
ehelin
parents: 10405
diff changeset
210 class KlassInfoClosure : public StackObj {
2cbc8f3011a0 8015972: Refactor the sending of the object count after GC event
ehelin
parents: 10405
diff changeset
211 public:
2cbc8f3011a0 8015972: Refactor the sending of the object count after GC event
ehelin
parents: 10405
diff changeset
212 // Called for each KlassInfoEntry.
2cbc8f3011a0 8015972: Refactor the sending of the object count after GC event
ehelin
parents: 10405
diff changeset
213 virtual void do_cinfo(KlassInfoEntry* cie) = 0;
2cbc8f3011a0 8015972: Refactor the sending of the object count after GC event
ehelin
parents: 10405
diff changeset
214 };
2cbc8f3011a0 8015972: Refactor the sending of the object count after GC event
ehelin
parents: 10405
diff changeset
215
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 1972
diff changeset
216 class KlassInfoBucket: public CHeapObj<mtInternal> {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
217 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
218 KlassInfoEntry* _list;
a61af66fc99e Initial load
duke
parents:
diff changeset
219 KlassInfoEntry* list() { return _list; }
a61af66fc99e Initial load
duke
parents:
diff changeset
220 void set_list(KlassInfoEntry* l) { _list = l; }
a61af66fc99e Initial load
duke
parents:
diff changeset
221 public:
10265
92ef81e2f571 8003557: NPG: Klass* const k should be const Klass* k.
minqi
parents: 8031
diff changeset
222 KlassInfoEntry* lookup(Klass* k);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
223 void initialize() { _list = NULL; }
a61af66fc99e Initial load
duke
parents:
diff changeset
224 void empty();
a61af66fc99e Initial load
duke
parents:
diff changeset
225 void iterate(KlassInfoClosure* cic);
a61af66fc99e Initial load
duke
parents:
diff changeset
226 };
a61af66fc99e Initial load
duke
parents:
diff changeset
227
a61af66fc99e Initial load
duke
parents:
diff changeset
228 class KlassInfoTable: public StackObj {
a61af66fc99e Initial load
duke
parents:
diff changeset
229 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
230 int _size;
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
231 static const int _num_buckets = 20011;
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
232 size_t _size_of_instances_in_words;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
233
a61af66fc99e Initial load
duke
parents:
diff changeset
234 // An aligned reference address (typically the least
a61af66fc99e Initial load
duke
parents:
diff changeset
235 // address in the perm gen) used for hashing klass
a61af66fc99e Initial load
duke
parents:
diff changeset
236 // objects.
a61af66fc99e Initial load
duke
parents:
diff changeset
237 HeapWord* _ref;
a61af66fc99e Initial load
duke
parents:
diff changeset
238
a61af66fc99e Initial load
duke
parents:
diff changeset
239 KlassInfoBucket* _buckets;
10265
92ef81e2f571 8003557: NPG: Klass* const k should be const Klass* k.
minqi
parents: 8031
diff changeset
240 uint hash(const Klass* p);
92ef81e2f571 8003557: NPG: Klass* const k should be const Klass* k.
minqi
parents: 8031
diff changeset
241 KlassInfoEntry* lookup(Klass* k); // allocates if not found!
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
242
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
243 class AllClassesFinder : public KlassClosure {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
244 KlassInfoTable *_table;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
245 public:
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
246 AllClassesFinder(KlassInfoTable* table) : _table(table) {}
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
247 virtual void do_klass(Klass* k);
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
248 };
0
a61af66fc99e Initial load
duke
parents:
diff changeset
249
a61af66fc99e Initial load
duke
parents:
diff changeset
250 public:
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
251 KlassInfoTable(bool need_class_stats);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
252 ~KlassInfoTable();
11
3c1dbcaaab1d 6621728: Heap inspection should not crash in the face of C-heap exhaustion
ysr
parents: 0
diff changeset
253 bool record_instance(const oop obj);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
254 void iterate(KlassInfoClosure* cic);
11
3c1dbcaaab1d 6621728: Heap inspection should not crash in the face of C-heap exhaustion
ysr
parents: 0
diff changeset
255 bool allocation_failed() { return _buckets == NULL; }
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
256 size_t size_of_instances_in_words() const;
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
257
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
258 friend class KlassInfoHisto;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
259 };
a61af66fc99e Initial load
duke
parents:
diff changeset
260
a61af66fc99e Initial load
duke
parents:
diff changeset
261 class KlassInfoHisto : public StackObj {
a61af66fc99e Initial load
duke
parents:
diff changeset
262 private:
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
263 static const int _histo_initial_size = 1000;
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
264 KlassInfoTable *_cit;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
265 GrowableArray<KlassInfoEntry*>* _elements;
a61af66fc99e Initial load
duke
parents:
diff changeset
266 GrowableArray<KlassInfoEntry*>* elements() const { return _elements; }
a61af66fc99e Initial load
duke
parents:
diff changeset
267 const char* _title;
a61af66fc99e Initial load
duke
parents:
diff changeset
268 const char* title() const { return _title; }
a61af66fc99e Initial load
duke
parents:
diff changeset
269 static int sort_helper(KlassInfoEntry** e1, KlassInfoEntry** e2);
a61af66fc99e Initial load
duke
parents:
diff changeset
270 void print_elements(outputStream* st) const;
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
271 void print_class_stats(outputStream* st, bool csv_format, const char *columns);
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
272 julong annotations_bytes(Array<AnnotationArray*>* p) const;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
273 const char *_selected_columns;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
274 bool is_selected(const char *col_name);
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
275 void print_title(outputStream* st, bool csv_format,
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
276 bool selected_columns_table[], int width_table[],
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
277 const char *name_table[]);
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
278
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
279 template <class T> static int count_bytes(T* x) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
280 return (HeapWordSize * ((x) ? (x)->size() : 0));
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
281 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
282
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
283 template <class T> static int count_bytes_array(T* x) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
284 if (x == NULL) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
285 return 0;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
286 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
287 if (x->length() == 0) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
288 // This is a shared array, e.g., Universe::the_empty_int_array(). Don't
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
289 // count it to avoid double-counting.
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
290 return 0;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
291 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
292 return HeapWordSize * x->size();
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
293 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
294
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
295 // returns a format string to print a julong with the given width. E.g,
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
296 // printf(num_fmt(6), julong(10)) would print out the number 10 with 4
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
297 // leading spaces.
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 12823
diff changeset
298 PRAGMA_DIAG_PUSH
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 12823
diff changeset
299 PRAGMA_FORMAT_NONLITERAL_IGNORED
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 12823
diff changeset
300
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
301 static void print_julong(outputStream* st, int width, julong n) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
302 int num_spaces = width - julong_width(n);
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
303 if (num_spaces > 0) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
304 st->print(str_fmt(num_spaces), "");
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
305 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
306 st->print(JULONG_FORMAT, n);
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
307 }
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 12823
diff changeset
308 PRAGMA_DIAG_POP
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
309
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
310 static char* perc_fmt(int width) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
311 static char buf[32];
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
312 jio_snprintf(buf, sizeof(buf), "%%%d.1f%%%%", width-1);
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
313 return buf;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
314 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
315
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
316 static char* str_fmt(int width) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
317 static char buf[32];
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
318 jio_snprintf(buf, sizeof(buf), "%%%ds", width);
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
319 return buf;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
320 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
321
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
322 static int julong_width(julong n) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
323 if (n == 0) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
324 return 1;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
325 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
326 int w = 0;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
327 while (n > 0) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
328 n /= 10;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
329 w += 1;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
330 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
331 return w;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
332 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
333
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
334 static int col_width(julong n, const char *name) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
335 int w = julong_width(n);
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
336 int min = (int)(strlen(name));
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
337 if (w < min) {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
338 w = min;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
339 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
340 // add a leading space for separation.
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
341 return w + 1;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
342 }
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
343
0
a61af66fc99e Initial load
duke
parents:
diff changeset
344 public:
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
345 KlassInfoHisto(KlassInfoTable* cit, const char* title);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
346 ~KlassInfoHisto();
a61af66fc99e Initial load
duke
parents:
diff changeset
347 void add(KlassInfoEntry* cie);
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
348 void print_histo_on(outputStream* st, bool print_class_stats, bool csv_format, const char *columns);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
349 void sort();
a61af66fc99e Initial load
duke
parents:
diff changeset
350 };
a61af66fc99e Initial load
duke
parents:
diff changeset
351
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
352 #endif // INCLUDE_SERVICES
0
a61af66fc99e Initial load
duke
parents:
diff changeset
353
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
354 // These declarations are needed since teh declaration of KlassInfoTable and
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
355 // KlassInfoClosure are guarded by #if INLCUDE_SERVICES
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
356 class KlassInfoTable;
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
357 class KlassInfoClosure;
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
358
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
359 class HeapInspection : public StackObj {
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
360 bool _csv_format; // "comma separated values" format for spreadsheet.
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
361 bool _print_help;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
362 bool _print_class_stats;
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
363 const char* _columns;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
364 public:
7956
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
365 HeapInspection(bool csv_format, bool print_help,
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
366 bool print_class_stats, const char *columns) :
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
367 _csv_format(csv_format), _print_help(print_help),
16fb9f942703 6479360: PrintClassHistogram improvements
acorn
parents: 6854
diff changeset
368 _print_class_stats(print_class_stats), _columns(columns) {}
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
369 void heap_inspection(outputStream* st) NOT_SERVICES_RETURN;
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
370 size_t populate_table(KlassInfoTable* cit, BoolObjectClosure* filter = NULL) NOT_SERVICES_RETURN;
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
371 static void find_instances_at_safepoint(Klass* k, GrowableArray<oop>* result) NOT_SERVICES_RETURN;
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
372 private:
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10265
diff changeset
373 void iterate_over_heap(KlassInfoTable* cit, BoolObjectClosure* filter = NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
374 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
375
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
376 #endif // SHARE_VM_MEMORY_HEAPINSPECTION_HPP