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 package sun.jvm.hotspot.tools;
26
27 import java.io.*;
28 import java.util.*;
29
30 import sun.jvm.hotspot.debugger.*;
31 import sun.jvm.hotspot.memory.*;
32 import sun.jvm.hotspot.oops.*;
33 import sun.jvm.hotspot.runtime.*;
34 import sun.jvm.hotspot.utilities.*;
35
36 /**
37 A command line tool to print class loader statistics.
38 */
39
40 public class ClassLoaderStats extends Tool {
41 boolean verbose = true;
42
43 public ClassLoaderStats() {
44 super();
45 }
46
47 public ClassLoaderStats(JVMDebugger d) {
48 super(d);
49 }
50
89
90 VM vm = VM.getVM();
91 ObjectHeap heap = vm.getObjectHeap();
92 Klass classLoaderKlass = vm.getSystemDictionary().getClassLoaderKlass();
93 try {
94 heap.iterateObjectsOfKlass(new DefaultHeapVisitor() {
95 public boolean doObj(Oop oop) {
96 loaderMap.put(oop, new LoaderData());
97 return false;
98 }
99 }, classLoaderKlass);
100 } catch (Exception se) {
101 se.printStackTrace();
102 }
103
104 if (verbose) {
105 err.println("done.");
106 err.print("computing per loader stat ..");
107 }
108
109 SystemDictionary dict = VM.getVM().getSystemDictionary();
110 dict.classesDo(new SystemDictionary.ClassVisitor() {
111 public void visit(Klass k) {
112 if (! (k instanceof InstanceKlass)) {
113 return;
114 }
115 Oop loader = ((InstanceKlass) k).getClassLoader();
116 LoaderData ld = (loader != null) ? (LoaderData)loaderMap.get(loader)
117 : bootstrapLoaderData;
118 if (ld != null) {
119 ld.numClasses++;
120 long size = computeSize((InstanceKlass)k);
121 ld.classDetail.add(new ClassData(k, size));
122 ld.classSize += size;
123 }
124 }
125 });
126
127 if (verbose) {
128 err.println("done.");
129 err.print("please wait.. computing liveness");
130 }
|
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 package sun.jvm.hotspot.tools;
26
27 import java.io.*;
28 import java.util.*;
29
30 import sun.jvm.hotspot.debugger.*;
31 import sun.jvm.hotspot.classfile.*;
32 import sun.jvm.hotspot.memory.*;
33 import sun.jvm.hotspot.oops.*;
34 import sun.jvm.hotspot.runtime.*;
35 import sun.jvm.hotspot.utilities.*;
36
37 /**
38 A command line tool to print class loader statistics.
39 */
40
41 public class ClassLoaderStats extends Tool {
42 boolean verbose = true;
43
44 public ClassLoaderStats() {
45 super();
46 }
47
48 public ClassLoaderStats(JVMDebugger d) {
49 super(d);
50 }
51
90
91 VM vm = VM.getVM();
92 ObjectHeap heap = vm.getObjectHeap();
93 Klass classLoaderKlass = vm.getSystemDictionary().getClassLoaderKlass();
94 try {
95 heap.iterateObjectsOfKlass(new DefaultHeapVisitor() {
96 public boolean doObj(Oop oop) {
97 loaderMap.put(oop, new LoaderData());
98 return false;
99 }
100 }, classLoaderKlass);
101 } catch (Exception se) {
102 se.printStackTrace();
103 }
104
105 if (verbose) {
106 err.println("done.");
107 err.print("computing per loader stat ..");
108 }
109
110 ClassLoaderDataGraph cldg = VM.getVM().getClassLoaderDataGraph();
111 cldg.classesDo(new ClassLoaderDataGraph.ClassVisitor() {
112 public void visit(Klass k) {
113 if (! (k instanceof InstanceKlass)) {
114 return;
115 }
116 Oop loader = ((InstanceKlass) k).getClassLoader();
117 LoaderData ld = (loader != null) ? (LoaderData)loaderMap.get(loader)
118 : bootstrapLoaderData;
119 if (ld != null) {
120 ld.numClasses++;
121 long size = computeSize((InstanceKlass)k);
122 ld.classDetail.add(new ClassData(k, size));
123 ld.classSize += size;
124 }
125 }
126 });
127
128 if (verbose) {
129 err.println("done.");
130 err.print("please wait.. computing liveness");
131 }
|