Mercurial > hg > truffle
comparison agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaVM.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.utilities.soql; | |
26 | |
27 import java.util.*; | |
28 import sun.jvm.hotspot.debugger.*; | |
29 import sun.jvm.hotspot.oops.*; | |
30 import sun.jvm.hotspot.runtime.*; | |
31 | |
32 public class JSJavaVM extends DefaultScriptObject { | |
33 private static final int FIELD_ADDRESS_SIZE = 0; | |
34 private static final int FIELD_BUILD_INFO = 1; | |
35 private static final int FIELD_CPU = 2; | |
36 private static final int FIELD_FLAGS = 3; | |
37 private static final int FIELD_HEAP = 4; | |
38 private static final int FIELD_OS = 5; | |
39 private static final int FIELD_SYS_PROPS = 6; | |
40 private static final int FIELD_THREADS = 7; | |
41 private static final int FIELD_TYPE = 8; | |
42 private static final int FIELD_VERSION = 9; | |
43 private static final int FIELD_CLASS_PATH = 10; | |
44 private static final int FIELD_BOOT_CLASS_PATH = 11; | |
45 private static final int FIELD_USER_DIR = 12; | |
46 private static final int FIELD_UNDEFINED = -1; | |
47 | |
48 public JSJavaVM(JSJavaFactory factory) { | |
49 this.factory = factory; | |
50 this.vm = VM.getVM(); | |
51 } | |
52 | |
53 public Object get(String name) { | |
54 int fieldID = getFieldID(name); | |
55 switch (fieldID) { | |
56 case FIELD_ADDRESS_SIZE: | |
57 return new Long(getVMBit()); | |
58 case FIELD_BUILD_INFO: | |
59 return vm.getVMInternalInfo(); | |
60 case FIELD_CPU: | |
61 return vm.getCPU(); | |
62 case FIELD_FLAGS: | |
63 return getFlags(); | |
64 case FIELD_HEAP: | |
65 return getHeap(); | |
66 case FIELD_OS: | |
67 return vm.getOS(); | |
68 case FIELD_SYS_PROPS: | |
69 return getSysProps(); | |
70 case FIELD_THREADS: | |
71 return getThreads(); | |
72 case FIELD_TYPE: | |
73 return getType(); | |
74 case FIELD_VERSION: | |
75 return vm.getVMRelease(); | |
76 case FIELD_CLASS_PATH: | |
77 return getClassPath(); | |
78 case FIELD_BOOT_CLASS_PATH: | |
79 return getBootClassPath(); | |
80 case FIELD_USER_DIR: | |
81 return getUserDir(); | |
82 case FIELD_UNDEFINED: | |
83 default: | |
84 return super.get(name); | |
85 } | |
86 } | |
87 | |
88 public Object[] getIds() { | |
89 Object[] superIds = super.getIds(); | |
90 Object[] tmp = fields.keySet().toArray(); | |
91 Object[] res = new Object[superIds.length + tmp.length]; | |
92 System.arraycopy(tmp, 0, res, 0, tmp.length); | |
93 System.arraycopy(superIds, 0, res, tmp.length, superIds.length); | |
94 return res; | |
95 } | |
96 | |
97 public boolean has(String name) { | |
98 if (getFieldID(name) != FIELD_UNDEFINED) { | |
99 return true; | |
100 } else { | |
101 return super.has(name); | |
102 } | |
103 } | |
104 | |
105 public void put(String name, Object value) { | |
106 if (getFieldID(name) == FIELD_UNDEFINED) { | |
107 super.put(name, value); | |
108 } | |
109 } | |
110 | |
111 public String toString() { | |
112 StringBuffer buf = new StringBuffer(); | |
113 buf.append("Java Hotspot "); | |
114 buf.append(getType()); | |
115 buf.append(' '); | |
116 buf.append(getVMBit()); | |
117 buf.append(" bit VM (build "); | |
118 buf.append(vm.getVMRelease()); | |
119 buf.append(")"); | |
120 return buf.toString(); | |
121 } | |
122 | |
123 //-- Internals only below this point | |
124 private static Map fields = new HashMap(); | |
125 private static void addField(String name, int fieldId) { | |
126 fields.put(name, new Integer(fieldId)); | |
127 } | |
128 | |
129 private static int getFieldID(String name) { | |
130 Integer res = (Integer) fields.get(name); | |
131 return (res != null)? res.intValue() : FIELD_UNDEFINED; | |
132 } | |
133 | |
134 static { | |
135 addField("addressSize", FIELD_ADDRESS_SIZE); | |
136 addField("buildInfo", FIELD_BUILD_INFO); | |
137 addField("cpu", FIELD_CPU); | |
138 addField("flags", FIELD_FLAGS); | |
139 addField("heap", FIELD_HEAP); | |
140 addField("os", FIELD_OS); | |
141 addField("sysProps", FIELD_SYS_PROPS); | |
142 addField("threads", FIELD_THREADS); | |
143 addField("type", FIELD_TYPE); | |
144 addField("version", FIELD_VERSION); | |
145 addField("classPath", FIELD_CLASS_PATH); | |
146 addField("bootClassPath", FIELD_BOOT_CLASS_PATH); | |
147 addField("userDir", FIELD_USER_DIR); | |
148 } | |
149 | |
150 private long getVMBit() { | |
151 // address size in bits | |
152 return vm.getAddressSize() * 8; | |
153 } | |
154 | |
155 private synchronized JSMap getFlags() { | |
156 if (flagsCache == null) { | |
157 VM.Flag[] flags = vm.getCommandLineFlags(); | |
158 Map map = new HashMap(); | |
159 if (flags != null) { | |
160 for (int f = 0; f < flags.length; f++) { | |
161 VM.Flag flag = flags[f]; | |
162 map.put(flag.getName(), flag.getValue()); | |
163 } | |
164 } | |
165 flagsCache = factory.newJSMap(map); | |
166 } | |
167 return flagsCache; | |
168 } | |
169 | |
170 private synchronized JSJavaHeap getHeap() { | |
171 if (heapCache == null) { | |
172 heapCache = factory.newJSJavaHeap(); | |
173 } | |
174 return heapCache; | |
175 } | |
176 | |
177 private synchronized JSMap getSysProps() { | |
178 if (sysPropsCache == null) { | |
179 Properties props = vm.getSystemProperties(); | |
180 Map map = new HashMap(); | |
181 if (props != null) { | |
182 Enumeration e = props.propertyNames(); | |
183 while (e.hasMoreElements()) { | |
184 String key = (String) e.nextElement(); | |
185 map.put(key, props.getProperty(key)); | |
186 } | |
187 } | |
188 sysPropsCache = factory.newJSMap(map); | |
189 } | |
190 return sysPropsCache; | |
191 } | |
192 | |
193 private synchronized JSList getThreads() { | |
194 if (threadsCache == null) { | |
195 List threads = new ArrayList(0); | |
196 threadsCache = factory.newJSList(threads); | |
197 JavaThread jthread = vm.getThreads().first(); | |
198 while (jthread != null) { | |
199 threads.add(jthread); | |
200 jthread = jthread.next(); | |
201 } | |
202 } | |
203 return threadsCache; | |
204 } | |
205 | |
206 private String getType() { | |
207 if (vm.isClientCompiler()) { | |
208 return "Client"; | |
209 } else if (vm.isServerCompiler()) { | |
210 return "Server"; | |
211 } else { | |
212 return "Core"; | |
213 } | |
214 } | |
215 | |
216 private String getClassPath() { | |
217 return vm.getSystemProperty("java.class.path"); | |
218 } | |
219 | |
220 private String getBootClassPath() { | |
221 return vm.getSystemProperty("sun.boot.class.path"); | |
222 } | |
223 | |
224 private String getUserDir() { | |
225 return vm.getSystemProperty("user.dir"); | |
226 } | |
227 | |
228 private JSMap flagsCache; | |
229 private JSJavaHeap heapCache; | |
230 private JSMap sysPropsCache; | |
231 private JSList threadsCache; | |
232 private final JSJavaFactory factory; | |
233 private final VM vm; | |
234 } |