comparison src/share/vm/oops/annotations.cpp @ 7956:16fb9f942703

6479360: PrintClassHistogram improvements Summary: jcmd <pid> GC.class_stats (UnlockDiagnosticVMOptions) Reviewed-by: coleenp, hseigel, sla, acorn Contributed-by: ioi.lam@oracle.com
author acorn
date Fri, 25 Jan 2013 15:06:18 -0500
parents 35431a769282
children 927a311d00f9
comparison
equal deleted inserted replaced
7950:6cf2530f7fd3 7956:16fb9f942703
1 /* 1 /*
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 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 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
22 * 22 *
23 */ 23 */
24 24
25 #include "precompiled.hpp" 25 #include "precompiled.hpp"
26 #include "classfile/classLoaderData.hpp" 26 #include "classfile/classLoaderData.hpp"
27 #include "memory/heapInspection.hpp"
27 #include "memory/metadataFactory.hpp" 28 #include "memory/metadataFactory.hpp"
28 #include "memory/oopFactory.hpp" 29 #include "memory/oopFactory.hpp"
29 #include "oops/annotations.hpp" 30 #include "oops/annotations.hpp"
30 #include "oops/instanceKlass.hpp" 31 #include "oops/instanceKlass.hpp"
31 #include "utilities/ostream.hpp" 32 #include "utilities/ostream.hpp"
112 113
113 void Annotations::print_value_on(outputStream* st) const { 114 void Annotations::print_value_on(outputStream* st) const {
114 st->print("Anotations(" INTPTR_FORMAT ")", this); 115 st->print("Anotations(" INTPTR_FORMAT ")", this);
115 } 116 }
116 117
118 #if INCLUDE_SERVICES
119 // Size Statistics
120
121 julong Annotations::count_bytes(Array<AnnotationArray*>* p) {
122 julong bytes = 0;
123 if (p != NULL) {
124 for (int i = 0; i < p->length(); i++) {
125 bytes += KlassSizeStats::count_array(p->at(i));
126 }
127 bytes += KlassSizeStats::count_array(p);
128 }
129 return bytes;
130 }
131
132 void Annotations::collect_statistics(KlassSizeStats *sz) const {
133 sz->_annotations_bytes = sz->count(this);
134 sz->_class_annotations_bytes = sz->count(class_annotations());
135 sz->_fields_annotations_bytes = count_bytes(fields_annotations());
136 sz->_methods_annotations_bytes = count_bytes(methods_annotations());
137 sz->_methods_parameter_annotations_bytes =
138 count_bytes(methods_parameter_annotations());
139 sz->_methods_default_annotations_bytes =
140 count_bytes(methods_default_annotations());
141
142 const Annotations* type_anno = type_annotations();
143 if (type_anno != NULL) {
144 sz->_type_annotations_bytes = sz->count(type_anno);
145 sz->_type_annotations_bytes += sz->count(type_anno->class_annotations());
146 sz->_type_annotations_bytes += count_bytes(type_anno->fields_annotations());
147 sz->_type_annotations_bytes += count_bytes(type_anno->methods_annotations());
148 }
149
150 sz->_annotations_bytes +=
151 sz->_class_annotations_bytes +
152 sz->_fields_annotations_bytes +
153 sz->_methods_annotations_bytes +
154 sz->_methods_parameter_annotations_bytes +
155 sz->_methods_default_annotations_bytes +
156 sz->_type_annotations_bytes;
157
158 sz->_ro_bytes += sz->_annotations_bytes;
159 }
160 #endif // INCLUDE_SERVICES
161
117 #define BULLET " - " 162 #define BULLET " - "
118 163
119 #ifndef PRODUCT 164 #ifndef PRODUCT
120 void Annotations::print_on(outputStream* st) const { 165 void Annotations::print_on(outputStream* st) const {
121 st->print(BULLET"class_annotations "); class_annotations()->print_value_on(st); 166 st->print(BULLET"class_annotations "); class_annotations()->print_value_on(st);