comparison agent/src/share/classes/sun/jvm/hotspot/tools/JMap.java @ 0:a61af66fc99e jdk7-b24

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children c18cbe5936b8
comparison
equal deleted inserted replaced
-1:000000000000 0:a61af66fc99e
1 /*
2 * Copyright 2004-2007 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 *
23 */
24
25 package sun.jvm.hotspot.tools;
26
27 import java.io.*;
28 import sun.jvm.hotspot.utilities.*;
29
30 public class JMap extends Tool {
31 public JMap(int m) {
32 mode = m;
33 }
34
35 public JMap() {
36 this(MODE_PMAP);
37 }
38
39 protected boolean needsJavaPrefix() {
40 return false;
41 }
42
43 public String getName() {
44 return "jmap";
45 }
46
47 protected String getCommandFlags() {
48 return "-heap|-heap:format=b|-histo|-permstat|-finalizerinfo";
49 }
50
51 protected void printFlagsUsage() {
52 System.out.println(" <no option>\tto print same info as Solaris pmap");
53 System.out.println(" -heap\tto print java heap summary");
54 System.out.println(" -heap:format=b\tto dump java heap in hprof binary format");
55 System.out.println(" -histo\tto print histogram of java object heap");
56 System.out.println(" -permstat\tto print permanent generation statistics");
57 System.out.println(" -finalizerinfo\tto print information on objects awaiting finalization");
58 super.printFlagsUsage();
59 }
60
61 public static final int MODE_HEAP_SUMMARY = 0;
62 public static final int MODE_HISTOGRAM = 1;
63 public static final int MODE_PERMSTAT = 2;
64 public static final int MODE_PMAP = 3;
65 public static final int MODE_HEAP_GRAPH_HPROF_BIN = 4;
66 public static final int MODE_HEAP_GRAPH_GXL = 5;
67 public static final int MODE_FINALIZERINFO = 6;
68
69 public void run() {
70 Tool tool = null;
71 switch (mode) {
72
73 case MODE_HEAP_SUMMARY:
74 tool = new HeapSummary();
75 break;
76
77 case MODE_HISTOGRAM:
78 tool = new ObjectHistogram();
79 break;
80
81 case MODE_PERMSTAT:
82 tool = new PermStat();
83 break;
84
85 case MODE_PMAP:
86 tool = new PMap();
87 break;
88
89 case MODE_HEAP_GRAPH_HPROF_BIN:
90 writeHeapHprofBin();
91 return;
92
93 case MODE_HEAP_GRAPH_GXL:
94 writeHeapGXL();
95 return;
96
97 case MODE_FINALIZERINFO:
98 tool = new FinalizerInfo();
99 break;
100
101 default:
102 usage();
103 break;
104 }
105
106 tool.setAgent(getAgent());
107 tool.setDebugeeType(getDebugeeType());
108 tool.run();
109 }
110
111 public static void main(String[] args) {
112 int mode = MODE_PMAP;
113 if (args.length > 1 ) {
114 String modeFlag = args[0];
115 boolean copyArgs = true;
116 if (modeFlag.equals("-heap")) {
117 mode = MODE_HEAP_SUMMARY;
118 } else if (modeFlag.equals("-histo")) {
119 mode = MODE_HISTOGRAM;
120 } else if (modeFlag.equals("-permstat")) {
121 mode = MODE_PERMSTAT;
122 } else if (modeFlag.equals("-finalizerinfo")) {
123 mode = MODE_FINALIZERINFO;
124 } else {
125 int index = modeFlag.indexOf("-heap:format=");
126 if (index != -1) {
127 String format = modeFlag.substring(1 + modeFlag.indexOf('='));
128 if (format.equals("b")) {
129 mode = MODE_HEAP_GRAPH_HPROF_BIN;
130 } else if (format.equals("x")) {
131 mode = MODE_HEAP_GRAPH_GXL;
132 } else {
133 System.err.println("unknown heap format:" + format);
134 return;
135 }
136 } else {
137 copyArgs = false;
138 }
139 }
140
141 if (copyArgs) {
142 String[] newArgs = new String[args.length - 1];
143 for (int i = 0; i < newArgs.length; i++) {
144 newArgs[i] = args[i + 1];
145 }
146 args = newArgs;
147 }
148 }
149
150 JMap jmap = new JMap(mode);
151 jmap.start(args);
152 jmap.stop();
153 }
154
155 public boolean writeHeapHprofBin(String fileName) {
156 try {
157 HeapGraphWriter hgw = new HeapHprofBinWriter();
158 hgw.write(fileName);
159 System.out.println("heap written to " + fileName);
160 return true;
161 } catch (IOException exp) {
162 System.err.println(exp.getMessage());
163 return false;
164 }
165 }
166
167 public boolean writeHeapHprofBin() {
168 return writeHeapHprofBin("heap.bin");
169 }
170
171 private boolean writeHeapGXL(String fileName) {
172 try {
173 HeapGraphWriter hgw = new HeapGXLWriter();
174 hgw.write(fileName);
175 System.out.println("heap written to " + fileName);
176 return true;
177 } catch (IOException exp) {
178 System.err.println(exp.getMessage());
179 return false;
180 }
181 }
182
183 public boolean writeHeapGXL() {
184 return writeHeapGXL("heap.xml");
185 }
186
187 private int mode;
188 }