annotate agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java @ 8005:ec0c4951286c

8004710: NPG: jmap could throw sun.jvm.hotspot.types.WrongTypeException after PermGen removal Summary: When calculating live object regions, make sure that the alignment reserve, at the end of a TLAB, is excluded. Reviewed-by: jmasa, brutisso
author stefank
date Tue, 29 Jan 2013 10:51:33 +0100
parents 8e47bac5643a
children f82bcc429e8c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
2 * Copyright (c) 2000, 2012, 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: 844
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 844
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: 844
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
a61af66fc99e Initial load
duke
parents:
diff changeset
25 package sun.jvm.hotspot.runtime;
a61af66fc99e Initial load
duke
parents:
diff changeset
26
a61af66fc99e Initial load
duke
parents:
diff changeset
27 import java.io.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
28 import java.net.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
29 import java.util.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
30 import java.util.regex.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
31 import sun.jvm.hotspot.code.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
32 import sun.jvm.hotspot.c1.*;
3908
7588156f5cf9 7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244)
never
parents: 2411
diff changeset
33 import sun.jvm.hotspot.code.*;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
34 import sun.jvm.hotspot.debugger.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
35 import sun.jvm.hotspot.interpreter.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
36 import sun.jvm.hotspot.memory.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
37 import sun.jvm.hotspot.oops.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
38 import sun.jvm.hotspot.types.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
39 import sun.jvm.hotspot.utilities.*;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
40 import sun.jvm.hotspot.runtime.*;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
41
a61af66fc99e Initial load
duke
parents:
diff changeset
42 /** <P> This class encapsulates the global state of the VM; the
a61af66fc99e Initial load
duke
parents:
diff changeset
43 universe, object heap, interpreter, etc. It is a Singleton and
a61af66fc99e Initial load
duke
parents:
diff changeset
44 must be initialized with a call to initialize() before calling
a61af66fc99e Initial load
duke
parents:
diff changeset
45 getVM(). </P>
a61af66fc99e Initial load
duke
parents:
diff changeset
46
a61af66fc99e Initial load
duke
parents:
diff changeset
47 <P> Many auxiliary classes (i.e., most of the VMObjects) keep
a61af66fc99e Initial load
duke
parents:
diff changeset
48 needed field offsets in the form of static Field objects. In a
a61af66fc99e Initial load
duke
parents:
diff changeset
49 debugging system, the VM might be shutdown and re-initialized (on
a61af66fc99e Initial load
duke
parents:
diff changeset
50 a differently-configured build, i.e., 32- vs. 64-bit), and all old
a61af66fc99e Initial load
duke
parents:
diff changeset
51 cached state (including fields and field offsets) must be
a61af66fc99e Initial load
duke
parents:
diff changeset
52 flushed. </P>
a61af66fc99e Initial load
duke
parents:
diff changeset
53
a61af66fc99e Initial load
duke
parents:
diff changeset
54 <P> An Observer pattern is used to implement the initialization of
a61af66fc99e Initial load
duke
parents:
diff changeset
55 such classes. Each such class, in its static initializer,
a61af66fc99e Initial load
duke
parents:
diff changeset
56 registers an Observer with the VM class via
a61af66fc99e Initial load
duke
parents:
diff changeset
57 VM.registerVMInitializedObserver(). This Observer is guaranteed to
a61af66fc99e Initial load
duke
parents:
diff changeset
58 be notified whenever the VM is initialized (or re-initialized). To
a61af66fc99e Initial load
duke
parents:
diff changeset
59 implement the first-time initialization, the observer is also
a61af66fc99e Initial load
duke
parents:
diff changeset
60 notified when it registers itself with the VM. (For bootstrapping
a61af66fc99e Initial load
duke
parents:
diff changeset
61 reasons, this implies that the constructor of VM can not
a61af66fc99e Initial load
duke
parents:
diff changeset
62 instantiate any such objects, since VM.soleInstance will not have
a61af66fc99e Initial load
duke
parents:
diff changeset
63 been set yet. This is a bootstrapping issue which may have to be
a61af66fc99e Initial load
duke
parents:
diff changeset
64 revisited later.) </P>
a61af66fc99e Initial load
duke
parents:
diff changeset
65 */
a61af66fc99e Initial load
duke
parents:
diff changeset
66
a61af66fc99e Initial load
duke
parents:
diff changeset
67 public class VM {
a61af66fc99e Initial load
duke
parents:
diff changeset
68 private static VM soleInstance;
a61af66fc99e Initial load
duke
parents:
diff changeset
69 private static List vmInitializedObservers = new ArrayList();
a61af66fc99e Initial load
duke
parents:
diff changeset
70 private List vmResumedObservers = new ArrayList();
a61af66fc99e Initial load
duke
parents:
diff changeset
71 private List vmSuspendedObservers = new ArrayList();
a61af66fc99e Initial load
duke
parents:
diff changeset
72 private TypeDataBase db;
a61af66fc99e Initial load
duke
parents:
diff changeset
73 private boolean isBigEndian;
a61af66fc99e Initial load
duke
parents:
diff changeset
74 /** This is only present if in a debugging system */
a61af66fc99e Initial load
duke
parents:
diff changeset
75 private JVMDebugger debugger;
a61af66fc99e Initial load
duke
parents:
diff changeset
76 private long stackBias;
a61af66fc99e Initial load
duke
parents:
diff changeset
77 private long logAddressSize;
a61af66fc99e Initial load
duke
parents:
diff changeset
78 private Universe universe;
a61af66fc99e Initial load
duke
parents:
diff changeset
79 private ObjectHeap heap;
a61af66fc99e Initial load
duke
parents:
diff changeset
80 private SymbolTable symbols;
a61af66fc99e Initial load
duke
parents:
diff changeset
81 private StringTable strings;
a61af66fc99e Initial load
duke
parents:
diff changeset
82 private SystemDictionary dict;
a61af66fc99e Initial load
duke
parents:
diff changeset
83 private Threads threads;
a61af66fc99e Initial load
duke
parents:
diff changeset
84 private ObjectSynchronizer synchronizer;
a61af66fc99e Initial load
duke
parents:
diff changeset
85 private JNIHandles handles;
a61af66fc99e Initial load
duke
parents:
diff changeset
86 private Interpreter interpreter;
a61af66fc99e Initial load
duke
parents:
diff changeset
87 private StubRoutines stubRoutines;
a61af66fc99e Initial load
duke
parents:
diff changeset
88 private Bytes bytes;
3908
7588156f5cf9 7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244)
never
parents: 2411
diff changeset
89
0
a61af66fc99e Initial load
duke
parents:
diff changeset
90 /** Flags indicating whether we are attached to a core, C1, or C2 build */
a61af66fc99e Initial load
duke
parents:
diff changeset
91 private boolean usingClientCompiler;
a61af66fc99e Initial load
duke
parents:
diff changeset
92 private boolean usingServerCompiler;
a61af66fc99e Initial load
duke
parents:
diff changeset
93 /** Flag indicating whether UseTLAB is turned on */
a61af66fc99e Initial load
duke
parents:
diff changeset
94 private boolean useTLAB;
6641
a9fed06c01d2 7154641: Servicability agent should work on platforms other than x86, sparc
bpittore
parents: 6266
diff changeset
95 /** Flag indicating whether invokedynamic support is on */
a9fed06c01d2 7154641: Servicability agent should work on platforms other than x86, sparc
bpittore
parents: 6266
diff changeset
96 private boolean enableInvokeDynamic;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
97 /** alignment constants */
a61af66fc99e Initial load
duke
parents:
diff changeset
98 private boolean isLP64;
a61af66fc99e Initial load
duke
parents:
diff changeset
99 private int bytesPerLong;
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
100 private int bytesPerWord;
1571
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
101 private int objectAlignmentInBytes;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
102 private int minObjAlignmentInBytes;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
103 private int logMinObjAlignmentInBytes;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
104 private int heapWordSize;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
105 private int heapOopSize;
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
106 private int klassPtrSize;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
107 private int oopSize;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
108 /** This is only present in a non-core build */
a61af66fc99e Initial load
duke
parents:
diff changeset
109 private CodeCache codeCache;
a61af66fc99e Initial load
duke
parents:
diff changeset
110 /** This is only present in a C1 build */
a61af66fc99e Initial load
duke
parents:
diff changeset
111 private Runtime1 runtime1;
a61af66fc99e Initial load
duke
parents:
diff changeset
112 /** These constants come from globalDefinitions.hpp */
a61af66fc99e Initial load
duke
parents:
diff changeset
113 private int invocationEntryBCI;
a61af66fc99e Initial load
duke
parents:
diff changeset
114 private int invalidOSREntryBCI;
a61af66fc99e Initial load
duke
parents:
diff changeset
115 private ReversePtrs revPtrs;
a61af66fc99e Initial load
duke
parents:
diff changeset
116 private VMRegImpl vmregImpl;
8005
ec0c4951286c 8004710: NPG: jmap could throw sun.jvm.hotspot.types.WrongTypeException after PermGen removal
stefank
parents: 6848
diff changeset
117 private int reserveForAllocationPrefetch;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
118
a61af66fc99e Initial load
duke
parents:
diff changeset
119 // System.getProperties from debuggee VM
a61af66fc99e Initial load
duke
parents:
diff changeset
120 private Properties sysProps;
a61af66fc99e Initial load
duke
parents:
diff changeset
121
a61af66fc99e Initial load
duke
parents:
diff changeset
122 // VM version strings come from Abstract_VM_Version class
a61af66fc99e Initial load
duke
parents:
diff changeset
123 private String vmRelease;
a61af66fc99e Initial load
duke
parents:
diff changeset
124 private String vmInternalInfo;
a61af66fc99e Initial load
duke
parents:
diff changeset
125
a61af66fc99e Initial load
duke
parents:
diff changeset
126 private Flag[] commandLineFlags;
a61af66fc99e Initial load
duke
parents:
diff changeset
127 private Map flagsMap;
a61af66fc99e Initial load
duke
parents:
diff changeset
128
a61af66fc99e Initial load
duke
parents:
diff changeset
129 private static Type intxType;
a61af66fc99e Initial load
duke
parents:
diff changeset
130 private static Type uintxType;
a61af66fc99e Initial load
duke
parents:
diff changeset
131 private static CIntegerType boolType;
a61af66fc99e Initial load
duke
parents:
diff changeset
132 private Boolean sharingEnabled;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
133 private Boolean compressedOopsEnabled;
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
134 private Boolean compressedKlassPointersEnabled;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
135
a61af66fc99e Initial load
duke
parents:
diff changeset
136 // command line flags supplied to VM - see struct Flag in globals.hpp
a61af66fc99e Initial load
duke
parents:
diff changeset
137 public static final class Flag {
a61af66fc99e Initial load
duke
parents:
diff changeset
138 private String type;
a61af66fc99e Initial load
duke
parents:
diff changeset
139 private String name;
a61af66fc99e Initial load
duke
parents:
diff changeset
140 private Address addr;
a61af66fc99e Initial load
duke
parents:
diff changeset
141 private String kind;
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
142 private int origin;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
143
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
144 private Flag(String type, String name, Address addr, String kind, int origin) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
145 this.type = type;
a61af66fc99e Initial load
duke
parents:
diff changeset
146 this.name = name;
a61af66fc99e Initial load
duke
parents:
diff changeset
147 this.addr = addr;
a61af66fc99e Initial load
duke
parents:
diff changeset
148 this.kind = kind;
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
149 this.origin = origin;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
150 }
a61af66fc99e Initial load
duke
parents:
diff changeset
151
a61af66fc99e Initial load
duke
parents:
diff changeset
152 public String getType() {
a61af66fc99e Initial load
duke
parents:
diff changeset
153 return type;
a61af66fc99e Initial load
duke
parents:
diff changeset
154 }
a61af66fc99e Initial load
duke
parents:
diff changeset
155
a61af66fc99e Initial load
duke
parents:
diff changeset
156 public String getName() {
a61af66fc99e Initial load
duke
parents:
diff changeset
157 return name;
a61af66fc99e Initial load
duke
parents:
diff changeset
158 }
a61af66fc99e Initial load
duke
parents:
diff changeset
159
a61af66fc99e Initial load
duke
parents:
diff changeset
160 public Address getAddress() {
a61af66fc99e Initial load
duke
parents:
diff changeset
161 return addr;
a61af66fc99e Initial load
duke
parents:
diff changeset
162 }
a61af66fc99e Initial load
duke
parents:
diff changeset
163
a61af66fc99e Initial load
duke
parents:
diff changeset
164 public String getKind() {
a61af66fc99e Initial load
duke
parents:
diff changeset
165 return kind;
a61af66fc99e Initial load
duke
parents:
diff changeset
166 }
a61af66fc99e Initial load
duke
parents:
diff changeset
167
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
168 public int getOrigin() {
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
169 return origin;
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
170 }
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
171
0
a61af66fc99e Initial load
duke
parents:
diff changeset
172 public boolean isBool() {
a61af66fc99e Initial load
duke
parents:
diff changeset
173 return type.equals("bool");
a61af66fc99e Initial load
duke
parents:
diff changeset
174 }
a61af66fc99e Initial load
duke
parents:
diff changeset
175
a61af66fc99e Initial load
duke
parents:
diff changeset
176 public boolean getBool() {
a61af66fc99e Initial load
duke
parents:
diff changeset
177 if (Assert.ASSERTS_ENABLED) {
a61af66fc99e Initial load
duke
parents:
diff changeset
178 Assert.that(isBool(), "not a bool flag!");
a61af66fc99e Initial load
duke
parents:
diff changeset
179 }
a61af66fc99e Initial load
duke
parents:
diff changeset
180 return addr.getCIntegerAt(0, boolType.getSize(), boolType.isUnsigned())
a61af66fc99e Initial load
duke
parents:
diff changeset
181 != 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
182 }
a61af66fc99e Initial load
duke
parents:
diff changeset
183
a61af66fc99e Initial load
duke
parents:
diff changeset
184 public boolean isIntx() {
a61af66fc99e Initial load
duke
parents:
diff changeset
185 return type.equals("intx");
a61af66fc99e Initial load
duke
parents:
diff changeset
186 }
a61af66fc99e Initial load
duke
parents:
diff changeset
187
a61af66fc99e Initial load
duke
parents:
diff changeset
188 public long getIntx() {
a61af66fc99e Initial load
duke
parents:
diff changeset
189 if (Assert.ASSERTS_ENABLED) {
a61af66fc99e Initial load
duke
parents:
diff changeset
190 Assert.that(isIntx(), "not a intx flag!");
a61af66fc99e Initial load
duke
parents:
diff changeset
191 }
a61af66fc99e Initial load
duke
parents:
diff changeset
192 return addr.getCIntegerAt(0, intxType.getSize(), false);
a61af66fc99e Initial load
duke
parents:
diff changeset
193 }
a61af66fc99e Initial load
duke
parents:
diff changeset
194
a61af66fc99e Initial load
duke
parents:
diff changeset
195 public boolean isUIntx() {
a61af66fc99e Initial load
duke
parents:
diff changeset
196 return type.equals("uintx");
a61af66fc99e Initial load
duke
parents:
diff changeset
197 }
a61af66fc99e Initial load
duke
parents:
diff changeset
198
a61af66fc99e Initial load
duke
parents:
diff changeset
199 public long getUIntx() {
a61af66fc99e Initial load
duke
parents:
diff changeset
200 if (Assert.ASSERTS_ENABLED) {
a61af66fc99e Initial load
duke
parents:
diff changeset
201 Assert.that(isUIntx(), "not a uintx flag!");
a61af66fc99e Initial load
duke
parents:
diff changeset
202 }
a61af66fc99e Initial load
duke
parents:
diff changeset
203 return addr.getCIntegerAt(0, uintxType.getSize(), true);
a61af66fc99e Initial load
duke
parents:
diff changeset
204 }
a61af66fc99e Initial load
duke
parents:
diff changeset
205
a61af66fc99e Initial load
duke
parents:
diff changeset
206 public String getValue() {
a61af66fc99e Initial load
duke
parents:
diff changeset
207 if (isBool()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
208 return new Boolean(getBool()).toString();
a61af66fc99e Initial load
duke
parents:
diff changeset
209 } else if (isIntx()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
210 return new Long(getIntx()).toString();
a61af66fc99e Initial load
duke
parents:
diff changeset
211 } else if (isUIntx()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
212 return new Long(getUIntx()).toString();
a61af66fc99e Initial load
duke
parents:
diff changeset
213 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
214 return null;
a61af66fc99e Initial load
duke
parents:
diff changeset
215 }
a61af66fc99e Initial load
duke
parents:
diff changeset
216 }
a61af66fc99e Initial load
duke
parents:
diff changeset
217 };
a61af66fc99e Initial load
duke
parents:
diff changeset
218
a61af66fc99e Initial load
duke
parents:
diff changeset
219 private static void checkVMVersion(String vmRelease) {
a61af66fc99e Initial load
duke
parents:
diff changeset
220 if (System.getProperty("sun.jvm.hotspot.runtime.VM.disableVersionCheck") == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
221 // read sa build version.
a61af66fc99e Initial load
duke
parents:
diff changeset
222 String versionProp = "sun.jvm.hotspot.runtime.VM.saBuildVersion";
a61af66fc99e Initial load
duke
parents:
diff changeset
223 String saVersion = saProps.getProperty(versionProp);
a61af66fc99e Initial load
duke
parents:
diff changeset
224 if (saVersion == null)
a61af66fc99e Initial load
duke
parents:
diff changeset
225 throw new RuntimeException("Missing property " + versionProp);
a61af66fc99e Initial load
duke
parents:
diff changeset
226
a61af66fc99e Initial load
duke
parents:
diff changeset
227 // Strip nonproduct VM version substring (note: saVersion doesn't have it).
a61af66fc99e Initial load
duke
parents:
diff changeset
228 String vmVersion = vmRelease.replaceAll("(-fastdebug)|(-debug)|(-jvmg)|(-optimized)|(-profiled)","");
a61af66fc99e Initial load
duke
parents:
diff changeset
229
a61af66fc99e Initial load
duke
parents:
diff changeset
230 if (saVersion.equals(vmVersion)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
231 // Exact match
a61af66fc99e Initial load
duke
parents:
diff changeset
232 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
233 }
a61af66fc99e Initial load
duke
parents:
diff changeset
234 if (saVersion.indexOf('-') == saVersion.lastIndexOf('-') &&
a61af66fc99e Initial load
duke
parents:
diff changeset
235 vmVersion.indexOf('-') == vmVersion.lastIndexOf('-')) {
a61af66fc99e Initial load
duke
parents:
diff changeset
236 // Throw exception if different release versions:
a61af66fc99e Initial load
duke
parents:
diff changeset
237 // <major>.<minor>-b<n>
a61af66fc99e Initial load
duke
parents:
diff changeset
238 throw new VMVersionMismatchException(saVersion, vmRelease);
a61af66fc99e Initial load
duke
parents:
diff changeset
239 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
240 // Otherwise print warning to allow mismatch not release versions
a61af66fc99e Initial load
duke
parents:
diff changeset
241 // during development.
a61af66fc99e Initial load
duke
parents:
diff changeset
242 System.err.println("WARNING: Hotspot VM version " + vmRelease +
a61af66fc99e Initial load
duke
parents:
diff changeset
243 " does not match with SA version " + saVersion +
a61af66fc99e Initial load
duke
parents:
diff changeset
244 "." + " You may see unexpected results. ");
a61af66fc99e Initial load
duke
parents:
diff changeset
245 }
a61af66fc99e Initial load
duke
parents:
diff changeset
246 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
247 System.err.println("WARNING: You have disabled SA and VM version check. You may be " +
a61af66fc99e Initial load
duke
parents:
diff changeset
248 "using incompatible version of SA and you may see unexpected " +
a61af66fc99e Initial load
duke
parents:
diff changeset
249 "results.");
a61af66fc99e Initial load
duke
parents:
diff changeset
250 }
a61af66fc99e Initial load
duke
parents:
diff changeset
251 }
a61af66fc99e Initial load
duke
parents:
diff changeset
252
a61af66fc99e Initial load
duke
parents:
diff changeset
253 private static final boolean disableDerivedPrinterTableCheck;
a61af66fc99e Initial load
duke
parents:
diff changeset
254 private static final Properties saProps;
a61af66fc99e Initial load
duke
parents:
diff changeset
255
a61af66fc99e Initial load
duke
parents:
diff changeset
256 static {
a61af66fc99e Initial load
duke
parents:
diff changeset
257 saProps = new Properties();
a61af66fc99e Initial load
duke
parents:
diff changeset
258 URL url = null;
a61af66fc99e Initial load
duke
parents:
diff changeset
259 try {
a61af66fc99e Initial load
duke
parents:
diff changeset
260 url = VM.class.getClassLoader().getResource("sa.properties");
a61af66fc99e Initial load
duke
parents:
diff changeset
261 saProps.load(new BufferedInputStream(url.openStream()));
a61af66fc99e Initial load
duke
parents:
diff changeset
262 } catch (Exception e) {
a61af66fc99e Initial load
duke
parents:
diff changeset
263 throw new RuntimeException("Unable to load properties " +
a61af66fc99e Initial load
duke
parents:
diff changeset
264 (url == null ? "null" : url.toString()) +
a61af66fc99e Initial load
duke
parents:
diff changeset
265 ": " + e.getMessage());
a61af66fc99e Initial load
duke
parents:
diff changeset
266 }
a61af66fc99e Initial load
duke
parents:
diff changeset
267
a61af66fc99e Initial load
duke
parents:
diff changeset
268 disableDerivedPrinterTableCheck = System.getProperty("sun.jvm.hotspot.runtime.VM.disableDerivedPointerTableCheck") != null;
a61af66fc99e Initial load
duke
parents:
diff changeset
269 }
a61af66fc99e Initial load
duke
parents:
diff changeset
270
a61af66fc99e Initial load
duke
parents:
diff changeset
271 private VM(TypeDataBase db, JVMDebugger debugger, boolean isBigEndian) {
a61af66fc99e Initial load
duke
parents:
diff changeset
272 this.db = db;
a61af66fc99e Initial load
duke
parents:
diff changeset
273 this.debugger = debugger;
a61af66fc99e Initial load
duke
parents:
diff changeset
274 this.isBigEndian = isBigEndian;
a61af66fc99e Initial load
duke
parents:
diff changeset
275
a61af66fc99e Initial load
duke
parents:
diff changeset
276 // Note that we don't construct universe, heap, threads,
a61af66fc99e Initial load
duke
parents:
diff changeset
277 // interpreter, or stubRoutines here (any more). The current
a61af66fc99e Initial load
duke
parents:
diff changeset
278 // initialization mechanisms require that the VM be completely set
a61af66fc99e Initial load
duke
parents:
diff changeset
279 // up (i.e., out of its constructor, with soleInstance assigned)
a61af66fc99e Initial load
duke
parents:
diff changeset
280 // before their static initializers are run.
a61af66fc99e Initial load
duke
parents:
diff changeset
281
a61af66fc99e Initial load
duke
parents:
diff changeset
282 if (db.getAddressSize() == 4) {
a61af66fc99e Initial load
duke
parents:
diff changeset
283 logAddressSize = 2;
a61af66fc99e Initial load
duke
parents:
diff changeset
284 } else if (db.getAddressSize() == 8) {
a61af66fc99e Initial load
duke
parents:
diff changeset
285 logAddressSize = 3;
a61af66fc99e Initial load
duke
parents:
diff changeset
286 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
287 throw new RuntimeException("Address size " + db.getAddressSize() + " not yet supported");
a61af66fc99e Initial load
duke
parents:
diff changeset
288 }
a61af66fc99e Initial load
duke
parents:
diff changeset
289
a61af66fc99e Initial load
duke
parents:
diff changeset
290 // read VM version info
a61af66fc99e Initial load
duke
parents:
diff changeset
291 try {
a61af66fc99e Initial load
duke
parents:
diff changeset
292 Type vmVersion = db.lookupType("Abstract_VM_Version");
a61af66fc99e Initial load
duke
parents:
diff changeset
293 Address releaseAddr = vmVersion.getAddressField("_s_vm_release").getValue();
a61af66fc99e Initial load
duke
parents:
diff changeset
294 vmRelease = CStringUtilities.getString(releaseAddr);
a61af66fc99e Initial load
duke
parents:
diff changeset
295 Address vmInternalInfoAddr = vmVersion.getAddressField("_s_internal_vm_info_string").getValue();
a61af66fc99e Initial load
duke
parents:
diff changeset
296 vmInternalInfo = CStringUtilities.getString(vmInternalInfoAddr);
8005
ec0c4951286c 8004710: NPG: jmap could throw sun.jvm.hotspot.types.WrongTypeException after PermGen removal
stefank
parents: 6848
diff changeset
297
ec0c4951286c 8004710: NPG: jmap could throw sun.jvm.hotspot.types.WrongTypeException after PermGen removal
stefank
parents: 6848
diff changeset
298 CIntegerType intType = (CIntegerType) db.lookupType("int");
ec0c4951286c 8004710: NPG: jmap could throw sun.jvm.hotspot.types.WrongTypeException after PermGen removal
stefank
parents: 6848
diff changeset
299 CIntegerField reserveForAllocationPrefetchField = vmVersion.getCIntegerField("_reserve_for_allocation_prefetch");
ec0c4951286c 8004710: NPG: jmap could throw sun.jvm.hotspot.types.WrongTypeException after PermGen removal
stefank
parents: 6848
diff changeset
300 reserveForAllocationPrefetch = (int)reserveForAllocationPrefetchField.getCInteger(intType);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
301 } catch (Exception exp) {
a61af66fc99e Initial load
duke
parents:
diff changeset
302 throw new RuntimeException("can't determine target's VM version : " + exp.getMessage());
a61af66fc99e Initial load
duke
parents:
diff changeset
303 }
a61af66fc99e Initial load
duke
parents:
diff changeset
304
a61af66fc99e Initial load
duke
parents:
diff changeset
305 checkVMVersion(vmRelease);
a61af66fc99e Initial load
duke
parents:
diff changeset
306
a61af66fc99e Initial load
duke
parents:
diff changeset
307 stackBias = db.lookupIntConstant("STACK_BIAS").intValue();
a61af66fc99e Initial load
duke
parents:
diff changeset
308 invocationEntryBCI = db.lookupIntConstant("InvocationEntryBci").intValue();
a61af66fc99e Initial load
duke
parents:
diff changeset
309 invalidOSREntryBCI = db.lookupIntConstant("InvalidOSREntryBci").intValue();
a61af66fc99e Initial load
duke
parents:
diff changeset
310
a61af66fc99e Initial load
duke
parents:
diff changeset
311 // We infer the presence of C1 or C2 from a couple of fields we
a61af66fc99e Initial load
duke
parents:
diff changeset
312 // already have present in the type database
a61af66fc99e Initial load
duke
parents:
diff changeset
313 {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
314 Type type = db.lookupType("Method");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
315 if (type.getField("_from_compiled_entry", false, false) == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
316 // Neither C1 nor C2 is present
a61af66fc99e Initial load
duke
parents:
diff changeset
317 usingClientCompiler = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
318 usingServerCompiler = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
319 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
320 // Determine whether C2 is present
3944
35c656d0b685 7090654: nightly failures after 7086585
never
parents: 3939
diff changeset
321 if (db.lookupType("Matcher", false) != null) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
322 usingServerCompiler = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
323 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
324 usingClientCompiler = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
325 }
a61af66fc99e Initial load
duke
parents:
diff changeset
326 }
a61af66fc99e Initial load
duke
parents:
diff changeset
327 }
a61af66fc99e Initial load
duke
parents:
diff changeset
328
a61af66fc99e Initial load
duke
parents:
diff changeset
329 useTLAB = (db.lookupIntConstant("UseTLAB").intValue() != 0);
6641
a9fed06c01d2 7154641: Servicability agent should work on platforms other than x86, sparc
bpittore
parents: 6266
diff changeset
330 enableInvokeDynamic = (db.lookupIntConstant("EnableInvokeDynamic").intValue() != 0);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
331
a61af66fc99e Initial load
duke
parents:
diff changeset
332 if (debugger != null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
333 isLP64 = debugger.getMachineDescription().isLP64();
a61af66fc99e Initial load
duke
parents:
diff changeset
334 }
a61af66fc99e Initial load
duke
parents:
diff changeset
335 bytesPerLong = db.lookupIntConstant("BytesPerLong").intValue();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
336 bytesPerWord = db.lookupIntConstant("BytesPerWord").intValue();
1576
4a2e260bb13a 6957882: nsk/sajdi tests failed with NullPointerException
kvn
parents: 1571
diff changeset
337 heapWordSize = db.lookupIntConstant("HeapWordSize").intValue();
4a2e260bb13a 6957882: nsk/sajdi tests failed with NullPointerException
kvn
parents: 1571
diff changeset
338 oopSize = db.lookupIntConstant("oopSize").intValue();
4a2e260bb13a 6957882: nsk/sajdi tests failed with NullPointerException
kvn
parents: 1571
diff changeset
339
4a2e260bb13a 6957882: nsk/sajdi tests failed with NullPointerException
kvn
parents: 1571
diff changeset
340 intxType = db.lookupType("intx");
4a2e260bb13a 6957882: nsk/sajdi tests failed with NullPointerException
kvn
parents: 1571
diff changeset
341 uintxType = db.lookupType("uintx");
4a2e260bb13a 6957882: nsk/sajdi tests failed with NullPointerException
kvn
parents: 1571
diff changeset
342 boolType = (CIntegerType) db.lookupType("bool");
4a2e260bb13a 6957882: nsk/sajdi tests failed with NullPointerException
kvn
parents: 1571
diff changeset
343
1571
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
344 minObjAlignmentInBytes = getObjectAlignmentInBytes();
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
345 if (minObjAlignmentInBytes == 8) {
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
346 logMinObjAlignmentInBytes = 3;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
347 } else if (minObjAlignmentInBytes == 16) {
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
348 logMinObjAlignmentInBytes = 4;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
349 } else {
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
350 throw new RuntimeException("Object alignment " + minObjAlignmentInBytes + " not yet supported");
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
351 }
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
352
749
81a249214991 6829234: Refix 6822407 and 6812971
poonam
parents: 692
diff changeset
353 if (isCompressedOopsEnabled()) {
81a249214991 6829234: Refix 6822407 and 6812971
poonam
parents: 692
diff changeset
354 // Size info for oops within java objects is fixed
81a249214991 6829234: Refix 6822407 and 6812971
poonam
parents: 692
diff changeset
355 heapOopSize = (int)getIntSize();
81a249214991 6829234: Refix 6822407 and 6812971
poonam
parents: 692
diff changeset
356 } else {
81a249214991 6829234: Refix 6822407 and 6812971
poonam
parents: 692
diff changeset
357 heapOopSize = (int)getOopSize();
81a249214991 6829234: Refix 6822407 and 6812971
poonam
parents: 692
diff changeset
358 }
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
359
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
360 if (isCompressedKlassPointersEnabled()) {
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
361 klassPtrSize = (int)getIntSize();
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
362 } else {
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
363 klassPtrSize = (int)getOopSize(); // same as an oop
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
364 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
365 }
a61af66fc99e Initial load
duke
parents:
diff changeset
366
a61af66fc99e Initial load
duke
parents:
diff changeset
367 /** This could be used by a reflective runtime system */
a61af66fc99e Initial load
duke
parents:
diff changeset
368 public static void initialize(TypeDataBase db, boolean isBigEndian) {
a61af66fc99e Initial load
duke
parents:
diff changeset
369 if (soleInstance != null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
370 throw new RuntimeException("Attempt to initialize VM twice");
a61af66fc99e Initial load
duke
parents:
diff changeset
371 }
a61af66fc99e Initial load
duke
parents:
diff changeset
372 soleInstance = new VM(db, null, isBigEndian);
a61af66fc99e Initial load
duke
parents:
diff changeset
373 for (Iterator iter = vmInitializedObservers.iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
374 ((Observer) iter.next()).update(null, null);
a61af66fc99e Initial load
duke
parents:
diff changeset
375 }
a61af66fc99e Initial load
duke
parents:
diff changeset
376 }
a61af66fc99e Initial load
duke
parents:
diff changeset
377
a61af66fc99e Initial load
duke
parents:
diff changeset
378 /** This is used by the debugging system */
a61af66fc99e Initial load
duke
parents:
diff changeset
379 public static void initialize(TypeDataBase db, JVMDebugger debugger) {
a61af66fc99e Initial load
duke
parents:
diff changeset
380 if (soleInstance != null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
381 throw new RuntimeException("Attempt to initialize VM twice");
a61af66fc99e Initial load
duke
parents:
diff changeset
382 }
a61af66fc99e Initial load
duke
parents:
diff changeset
383 soleInstance = new VM(db, debugger, debugger.getMachineDescription().isBigEndian());
689
f30ba3b36599 6822407: heapOopSize lookup is incorrect in Serviceability Agent.
poonam
parents: 655
diff changeset
384
0
a61af66fc99e Initial load
duke
parents:
diff changeset
385 for (Iterator iter = vmInitializedObservers.iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
386 ((Observer) iter.next()).update(null, null);
a61af66fc99e Initial load
duke
parents:
diff changeset
387 }
650
54782a4cd321 6812971: SA: re-attaching to process fails
poonam
parents: 331
diff changeset
388
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
389 debugger.putHeapConst(soleInstance.getHeapOopSize(), soleInstance.getKlassPtrSize(),
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
390 Universe.getNarrowOopBase(), Universe.getNarrowOopShift(),
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
391 Universe.getNarrowKlassBase(), Universe.getNarrowKlassShift());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
392 }
a61af66fc99e Initial load
duke
parents:
diff changeset
393
a61af66fc99e Initial load
duke
parents:
diff changeset
394 /** This is used by the debugging system */
a61af66fc99e Initial load
duke
parents:
diff changeset
395 public static void shutdown() {
a61af66fc99e Initial load
duke
parents:
diff changeset
396 soleInstance = null;
a61af66fc99e Initial load
duke
parents:
diff changeset
397 }
a61af66fc99e Initial load
duke
parents:
diff changeset
398
a61af66fc99e Initial load
duke
parents:
diff changeset
399 /** This is used by both the debugger and any runtime system. It is
a61af66fc99e Initial load
duke
parents:
diff changeset
400 the basic mechanism by which classes which mimic underlying VM
a61af66fc99e Initial load
duke
parents:
diff changeset
401 functionality cause themselves to be initialized. The given
a61af66fc99e Initial load
duke
parents:
diff changeset
402 observer will be notified (with arguments (null, null)) when the
a61af66fc99e Initial load
duke
parents:
diff changeset
403 VM is re-initialized, as well as when it registers itself with
a61af66fc99e Initial load
duke
parents:
diff changeset
404 the VM. */
a61af66fc99e Initial load
duke
parents:
diff changeset
405 public static void registerVMInitializedObserver(Observer o) {
a61af66fc99e Initial load
duke
parents:
diff changeset
406 vmInitializedObservers.add(o);
a61af66fc99e Initial load
duke
parents:
diff changeset
407 o.update(null, null);
a61af66fc99e Initial load
duke
parents:
diff changeset
408 }
a61af66fc99e Initial load
duke
parents:
diff changeset
409
a61af66fc99e Initial load
duke
parents:
diff changeset
410 /** This is the primary accessor used by both the debugger and any
a61af66fc99e Initial load
duke
parents:
diff changeset
411 potential runtime system */
a61af66fc99e Initial load
duke
parents:
diff changeset
412 public static VM getVM() {
a61af66fc99e Initial load
duke
parents:
diff changeset
413 if (soleInstance == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
414 throw new RuntimeException("VM.initialize() was not yet called");
a61af66fc99e Initial load
duke
parents:
diff changeset
415 }
a61af66fc99e Initial load
duke
parents:
diff changeset
416 return soleInstance;
a61af66fc99e Initial load
duke
parents:
diff changeset
417 }
a61af66fc99e Initial load
duke
parents:
diff changeset
418
a61af66fc99e Initial load
duke
parents:
diff changeset
419 /** This is only used by the debugging system. The given observer
a61af66fc99e Initial load
duke
parents:
diff changeset
420 will be notified if the underlying VM resumes execution. NOTE
a61af66fc99e Initial load
duke
parents:
diff changeset
421 that the given observer is not triggered if the VM is currently
a61af66fc99e Initial load
duke
parents:
diff changeset
422 running and therefore differs in behavior from {@link
a61af66fc99e Initial load
duke
parents:
diff changeset
423 #registerVMInitializedObserver} (because of the possibility of
a61af66fc99e Initial load
duke
parents:
diff changeset
424 race conditions if the observer is added while the VM is being
a61af66fc99e Initial load
duke
parents:
diff changeset
425 suspended or resumed). */
a61af66fc99e Initial load
duke
parents:
diff changeset
426 public void registerVMResumedObserver(Observer o) {
a61af66fc99e Initial load
duke
parents:
diff changeset
427 vmResumedObservers.add(o);
a61af66fc99e Initial load
duke
parents:
diff changeset
428 }
a61af66fc99e Initial load
duke
parents:
diff changeset
429
a61af66fc99e Initial load
duke
parents:
diff changeset
430 /** This is only used by the debugging system. The given observer
a61af66fc99e Initial load
duke
parents:
diff changeset
431 will be notified if the underlying VM suspends execution. NOTE
a61af66fc99e Initial load
duke
parents:
diff changeset
432 that the given observer is not triggered if the VM is currently
a61af66fc99e Initial load
duke
parents:
diff changeset
433 suspended and therefore differs in behavior from {@link
a61af66fc99e Initial load
duke
parents:
diff changeset
434 #registerVMInitializedObserver} (because of the possibility of
a61af66fc99e Initial load
duke
parents:
diff changeset
435 race conditions if the observer is added while the VM is being
a61af66fc99e Initial load
duke
parents:
diff changeset
436 suspended or resumed). */
a61af66fc99e Initial load
duke
parents:
diff changeset
437 public void registerVMSuspendedObserver(Observer o) {
a61af66fc99e Initial load
duke
parents:
diff changeset
438 vmSuspendedObservers.add(o);
a61af66fc99e Initial load
duke
parents:
diff changeset
439 }
a61af66fc99e Initial load
duke
parents:
diff changeset
440
a61af66fc99e Initial load
duke
parents:
diff changeset
441 /** This is only used by the debugging system. Informs all
a61af66fc99e Initial load
duke
parents:
diff changeset
442 registered resumption observers that the VM has been resumed.
a61af66fc99e Initial load
duke
parents:
diff changeset
443 The application is responsible for actually having performed the
a61af66fc99e Initial load
duke
parents:
diff changeset
444 resumption. No OopHandles must be used after this point, as they
a61af66fc99e Initial load
duke
parents:
diff changeset
445 may move in the target address space due to garbage
a61af66fc99e Initial load
duke
parents:
diff changeset
446 collection. */
a61af66fc99e Initial load
duke
parents:
diff changeset
447 public void fireVMResumed() {
a61af66fc99e Initial load
duke
parents:
diff changeset
448 for (Iterator iter = vmResumedObservers.iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
449 ((Observer) iter.next()).update(null, null);
a61af66fc99e Initial load
duke
parents:
diff changeset
450 }
a61af66fc99e Initial load
duke
parents:
diff changeset
451 }
a61af66fc99e Initial load
duke
parents:
diff changeset
452
a61af66fc99e Initial load
duke
parents:
diff changeset
453 /** This is only used by the debugging system. Informs all
a61af66fc99e Initial load
duke
parents:
diff changeset
454 registered suspension observers that the VM has been suspended.
a61af66fc99e Initial load
duke
parents:
diff changeset
455 The application is responsible for actually having performed the
a61af66fc99e Initial load
duke
parents:
diff changeset
456 suspension. Garbage collection must be forbidden at this point;
a61af66fc99e Initial load
duke
parents:
diff changeset
457 for example, a JPDA-level suspension is not adequate since the
a61af66fc99e Initial load
duke
parents:
diff changeset
458 VM thread may still be running. */
a61af66fc99e Initial load
duke
parents:
diff changeset
459 public void fireVMSuspended() {
a61af66fc99e Initial load
duke
parents:
diff changeset
460 for (Iterator iter = vmSuspendedObservers.iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
461 ((Observer) iter.next()).update(null, null);
a61af66fc99e Initial load
duke
parents:
diff changeset
462 }
a61af66fc99e Initial load
duke
parents:
diff changeset
463 }
a61af66fc99e Initial load
duke
parents:
diff changeset
464
a61af66fc99e Initial load
duke
parents:
diff changeset
465 /** Returns the OS this VM is running on. Notice that by delegating
a61af66fc99e Initial load
duke
parents:
diff changeset
466 to the debugger we can transparently support remote
a61af66fc99e Initial load
duke
parents:
diff changeset
467 debugging. */
a61af66fc99e Initial load
duke
parents:
diff changeset
468 public String getOS() {
a61af66fc99e Initial load
duke
parents:
diff changeset
469 if (debugger != null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
470 return debugger.getOS();
a61af66fc99e Initial load
duke
parents:
diff changeset
471 }
a61af66fc99e Initial load
duke
parents:
diff changeset
472 return PlatformInfo.getOS();
a61af66fc99e Initial load
duke
parents:
diff changeset
473 }
a61af66fc99e Initial load
duke
parents:
diff changeset
474
a61af66fc99e Initial load
duke
parents:
diff changeset
475 /** Returns the CPU this VM is running on. Notice that by delegating
a61af66fc99e Initial load
duke
parents:
diff changeset
476 to the debugger we can transparently support remote
a61af66fc99e Initial load
duke
parents:
diff changeset
477 debugging. */
a61af66fc99e Initial load
duke
parents:
diff changeset
478 public String getCPU() {
a61af66fc99e Initial load
duke
parents:
diff changeset
479 if (debugger != null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
480 return debugger.getCPU();
a61af66fc99e Initial load
duke
parents:
diff changeset
481 }
a61af66fc99e Initial load
duke
parents:
diff changeset
482 return PlatformInfo.getCPU();
a61af66fc99e Initial load
duke
parents:
diff changeset
483 }
a61af66fc99e Initial load
duke
parents:
diff changeset
484
a61af66fc99e Initial load
duke
parents:
diff changeset
485 public Type lookupType(String cTypeName) {
a61af66fc99e Initial load
duke
parents:
diff changeset
486 return db.lookupType(cTypeName);
a61af66fc99e Initial load
duke
parents:
diff changeset
487 }
a61af66fc99e Initial load
duke
parents:
diff changeset
488
a61af66fc99e Initial load
duke
parents:
diff changeset
489 public Integer lookupIntConstant(String name) {
a61af66fc99e Initial load
duke
parents:
diff changeset
490 return db.lookupIntConstant(name);
a61af66fc99e Initial load
duke
parents:
diff changeset
491 }
a61af66fc99e Initial load
duke
parents:
diff changeset
492
6782
5a98bf7d847b 6879063: SA should use hsdis for disassembly
minqi
parents: 6725
diff changeset
493 // Convenience function for conversions
5a98bf7d847b 6879063: SA should use hsdis for disassembly
minqi
parents: 6725
diff changeset
494 static public long getAddressValue(Address addr) {
5a98bf7d847b 6879063: SA should use hsdis for disassembly
minqi
parents: 6725
diff changeset
495 return VM.getVM().getDebugger().getAddressValue(addr);
5a98bf7d847b 6879063: SA should use hsdis for disassembly
minqi
parents: 6725
diff changeset
496 }
5a98bf7d847b 6879063: SA should use hsdis for disassembly
minqi
parents: 6725
diff changeset
497
0
a61af66fc99e Initial load
duke
parents:
diff changeset
498 public long getAddressSize() {
a61af66fc99e Initial load
duke
parents:
diff changeset
499 return db.getAddressSize();
a61af66fc99e Initial load
duke
parents:
diff changeset
500 }
a61af66fc99e Initial load
duke
parents:
diff changeset
501
a61af66fc99e Initial load
duke
parents:
diff changeset
502 public long getOopSize() {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
503 return oopSize;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
504 }
a61af66fc99e Initial load
duke
parents:
diff changeset
505
a61af66fc99e Initial load
duke
parents:
diff changeset
506 public long getLogAddressSize() {
a61af66fc99e Initial load
duke
parents:
diff changeset
507 return logAddressSize;
a61af66fc99e Initial load
duke
parents:
diff changeset
508 }
a61af66fc99e Initial load
duke
parents:
diff changeset
509
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
510 public long getIntSize() {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
511 return db.getJIntType().getSize();
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
512 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
513
0
a61af66fc99e Initial load
duke
parents:
diff changeset
514 /** NOTE: this offset is in BYTES in this system! */
a61af66fc99e Initial load
duke
parents:
diff changeset
515 public long getStackBias() {
a61af66fc99e Initial load
duke
parents:
diff changeset
516 return stackBias;
a61af66fc99e Initial load
duke
parents:
diff changeset
517 }
a61af66fc99e Initial load
duke
parents:
diff changeset
518
a61af66fc99e Initial load
duke
parents:
diff changeset
519 /** Indicates whether the underlying machine supports the LP64 data
a61af66fc99e Initial load
duke
parents:
diff changeset
520 model. This is needed for conditionalizing code in a few places */
a61af66fc99e Initial load
duke
parents:
diff changeset
521 public boolean isLP64() {
a61af66fc99e Initial load
duke
parents:
diff changeset
522 if (Assert.ASSERTS_ENABLED) {
a61af66fc99e Initial load
duke
parents:
diff changeset
523 Assert.that(isDebugging(), "Debugging system only for now");
a61af66fc99e Initial load
duke
parents:
diff changeset
524 }
a61af66fc99e Initial load
duke
parents:
diff changeset
525 return isLP64;
a61af66fc99e Initial load
duke
parents:
diff changeset
526 }
a61af66fc99e Initial load
duke
parents:
diff changeset
527
a61af66fc99e Initial load
duke
parents:
diff changeset
528 /** Get bytes-per-long == long/double natural alignment. */
a61af66fc99e Initial load
duke
parents:
diff changeset
529 public int getBytesPerLong() {
a61af66fc99e Initial load
duke
parents:
diff changeset
530 return bytesPerLong;
a61af66fc99e Initial load
duke
parents:
diff changeset
531 }
a61af66fc99e Initial load
duke
parents:
diff changeset
532
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
533 public int getBytesPerWord() {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
534 return bytesPerWord;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
535 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
536
0
a61af66fc99e Initial load
duke
parents:
diff changeset
537 /** Get minimum object alignment in bytes. */
a61af66fc99e Initial load
duke
parents:
diff changeset
538 public int getMinObjAlignmentInBytes() {
a61af66fc99e Initial load
duke
parents:
diff changeset
539 return minObjAlignmentInBytes;
a61af66fc99e Initial load
duke
parents:
diff changeset
540 }
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
541 public int getLogMinObjAlignmentInBytes() {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
542 return logMinObjAlignmentInBytes;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
543 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
544
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
545 public int getHeapWordSize() {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
546 return heapWordSize;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
547 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
548
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
549 public int getHeapOopSize() {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
550 return heapOopSize;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
551 }
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
552
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
553 public int getKlassPtrSize() {
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
554 return klassPtrSize;
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
555 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
556 /** Utility routine for getting data structure alignment correct */
a61af66fc99e Initial load
duke
parents:
diff changeset
557 public long alignUp(long size, long alignment) {
a61af66fc99e Initial load
duke
parents:
diff changeset
558 return (size + alignment - 1) & ~(alignment - 1);
a61af66fc99e Initial load
duke
parents:
diff changeset
559 }
a61af66fc99e Initial load
duke
parents:
diff changeset
560
a61af66fc99e Initial load
duke
parents:
diff changeset
561 /** Utility routine for getting data structure alignment correct */
a61af66fc99e Initial load
duke
parents:
diff changeset
562 public long alignDown(long size, long alignment) {
a61af66fc99e Initial load
duke
parents:
diff changeset
563 return size & ~(alignment - 1);
a61af66fc99e Initial load
duke
parents:
diff changeset
564 }
a61af66fc99e Initial load
duke
parents:
diff changeset
565
a61af66fc99e Initial load
duke
parents:
diff changeset
566 /** Utility routine for building an int from two "unsigned" 16-bit
a61af66fc99e Initial load
duke
parents:
diff changeset
567 shorts */
a61af66fc99e Initial load
duke
parents:
diff changeset
568 public int buildIntFromShorts(short low, short high) {
a61af66fc99e Initial load
duke
parents:
diff changeset
569 return (((int) high) << 16) | (((int) low) & 0xFFFF);
a61af66fc99e Initial load
duke
parents:
diff changeset
570 }
a61af66fc99e Initial load
duke
parents:
diff changeset
571
a61af66fc99e Initial load
duke
parents:
diff changeset
572 /** Utility routine for building a long from two "unsigned" 32-bit
a61af66fc99e Initial load
duke
parents:
diff changeset
573 ints in <b>platform-dependent</b> order */
a61af66fc99e Initial load
duke
parents:
diff changeset
574 public long buildLongFromIntsPD(int oneHalf, int otherHalf) {
a61af66fc99e Initial load
duke
parents:
diff changeset
575 if (isBigEndian) {
a61af66fc99e Initial load
duke
parents:
diff changeset
576 return (((long) otherHalf) << 32) | (((long) oneHalf) & 0x00000000FFFFFFFFL);
a61af66fc99e Initial load
duke
parents:
diff changeset
577 } else{
a61af66fc99e Initial load
duke
parents:
diff changeset
578 return (((long) oneHalf) << 32) | (((long) otherHalf) & 0x00000000FFFFFFFFL);
a61af66fc99e Initial load
duke
parents:
diff changeset
579 }
a61af66fc99e Initial load
duke
parents:
diff changeset
580 }
a61af66fc99e Initial load
duke
parents:
diff changeset
581
a61af66fc99e Initial load
duke
parents:
diff changeset
582 /** Indicates whether Thread-Local Allocation Buffers are used */
a61af66fc99e Initial load
duke
parents:
diff changeset
583 public boolean getUseTLAB() {
a61af66fc99e Initial load
duke
parents:
diff changeset
584 return useTLAB;
a61af66fc99e Initial load
duke
parents:
diff changeset
585 }
a61af66fc99e Initial load
duke
parents:
diff changeset
586
6641
a9fed06c01d2 7154641: Servicability agent should work on platforms other than x86, sparc
bpittore
parents: 6266
diff changeset
587 public boolean getEnableInvokeDynamic() {
a9fed06c01d2 7154641: Servicability agent should work on platforms other than x86, sparc
bpittore
parents: 6266
diff changeset
588 return enableInvokeDynamic;
a9fed06c01d2 7154641: Servicability agent should work on platforms other than x86, sparc
bpittore
parents: 6266
diff changeset
589 }
a9fed06c01d2 7154641: Servicability agent should work on platforms other than x86, sparc
bpittore
parents: 6266
diff changeset
590
0
a61af66fc99e Initial load
duke
parents:
diff changeset
591 public TypeDataBase getTypeDataBase() {
a61af66fc99e Initial load
duke
parents:
diff changeset
592 return db;
a61af66fc99e Initial load
duke
parents:
diff changeset
593 }
a61af66fc99e Initial load
duke
parents:
diff changeset
594
a61af66fc99e Initial load
duke
parents:
diff changeset
595 public Universe getUniverse() {
a61af66fc99e Initial load
duke
parents:
diff changeset
596 if (universe == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
597 universe = new Universe();
a61af66fc99e Initial load
duke
parents:
diff changeset
598 }
a61af66fc99e Initial load
duke
parents:
diff changeset
599 return universe;
a61af66fc99e Initial load
duke
parents:
diff changeset
600 }
a61af66fc99e Initial load
duke
parents:
diff changeset
601
a61af66fc99e Initial load
duke
parents:
diff changeset
602 public ObjectHeap getObjectHeap() {
a61af66fc99e Initial load
duke
parents:
diff changeset
603 if (heap == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
604 heap = new ObjectHeap(db);
a61af66fc99e Initial load
duke
parents:
diff changeset
605 }
a61af66fc99e Initial load
duke
parents:
diff changeset
606 return heap;
a61af66fc99e Initial load
duke
parents:
diff changeset
607 }
a61af66fc99e Initial load
duke
parents:
diff changeset
608
a61af66fc99e Initial load
duke
parents:
diff changeset
609 public SymbolTable getSymbolTable() {
a61af66fc99e Initial load
duke
parents:
diff changeset
610 if (symbols == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
611 symbols = SymbolTable.getTheTable();
a61af66fc99e Initial load
duke
parents:
diff changeset
612 }
a61af66fc99e Initial load
duke
parents:
diff changeset
613 return symbols;
a61af66fc99e Initial load
duke
parents:
diff changeset
614 }
a61af66fc99e Initial load
duke
parents:
diff changeset
615
a61af66fc99e Initial load
duke
parents:
diff changeset
616 public StringTable getStringTable() {
a61af66fc99e Initial load
duke
parents:
diff changeset
617 if (strings == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
618 strings = StringTable.getTheTable();
a61af66fc99e Initial load
duke
parents:
diff changeset
619 }
a61af66fc99e Initial load
duke
parents:
diff changeset
620 return strings;
a61af66fc99e Initial load
duke
parents:
diff changeset
621 }
a61af66fc99e Initial load
duke
parents:
diff changeset
622
a61af66fc99e Initial load
duke
parents:
diff changeset
623 public SystemDictionary getSystemDictionary() {
a61af66fc99e Initial load
duke
parents:
diff changeset
624 if (dict == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
625 dict = new SystemDictionary();
a61af66fc99e Initial load
duke
parents:
diff changeset
626 }
a61af66fc99e Initial load
duke
parents:
diff changeset
627 return dict;
a61af66fc99e Initial load
duke
parents:
diff changeset
628 }
a61af66fc99e Initial load
duke
parents:
diff changeset
629
a61af66fc99e Initial load
duke
parents:
diff changeset
630 public Threads getThreads() {
a61af66fc99e Initial load
duke
parents:
diff changeset
631 if (threads == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
632 threads = new Threads();
a61af66fc99e Initial load
duke
parents:
diff changeset
633 }
a61af66fc99e Initial load
duke
parents:
diff changeset
634 return threads;
a61af66fc99e Initial load
duke
parents:
diff changeset
635 }
a61af66fc99e Initial load
duke
parents:
diff changeset
636
a61af66fc99e Initial load
duke
parents:
diff changeset
637 public ObjectSynchronizer getObjectSynchronizer() {
a61af66fc99e Initial load
duke
parents:
diff changeset
638 if (synchronizer == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
639 synchronizer = new ObjectSynchronizer();
a61af66fc99e Initial load
duke
parents:
diff changeset
640 }
a61af66fc99e Initial load
duke
parents:
diff changeset
641 return synchronizer;
a61af66fc99e Initial load
duke
parents:
diff changeset
642 }
a61af66fc99e Initial load
duke
parents:
diff changeset
643
a61af66fc99e Initial load
duke
parents:
diff changeset
644 public JNIHandles getJNIHandles() {
a61af66fc99e Initial load
duke
parents:
diff changeset
645 if (handles == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
646 handles = new JNIHandles();
a61af66fc99e Initial load
duke
parents:
diff changeset
647 }
a61af66fc99e Initial load
duke
parents:
diff changeset
648 return handles;
a61af66fc99e Initial load
duke
parents:
diff changeset
649 }
a61af66fc99e Initial load
duke
parents:
diff changeset
650
a61af66fc99e Initial load
duke
parents:
diff changeset
651 public Interpreter getInterpreter() {
a61af66fc99e Initial load
duke
parents:
diff changeset
652 if (interpreter == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
653 interpreter = new Interpreter();
a61af66fc99e Initial load
duke
parents:
diff changeset
654 }
a61af66fc99e Initial load
duke
parents:
diff changeset
655 return interpreter;
a61af66fc99e Initial load
duke
parents:
diff changeset
656 }
a61af66fc99e Initial load
duke
parents:
diff changeset
657
a61af66fc99e Initial load
duke
parents:
diff changeset
658 public StubRoutines getStubRoutines() {
a61af66fc99e Initial load
duke
parents:
diff changeset
659 if (stubRoutines == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
660 stubRoutines = new StubRoutines();
a61af66fc99e Initial load
duke
parents:
diff changeset
661 }
a61af66fc99e Initial load
duke
parents:
diff changeset
662 return stubRoutines;
a61af66fc99e Initial load
duke
parents:
diff changeset
663 }
a61af66fc99e Initial load
duke
parents:
diff changeset
664
a61af66fc99e Initial load
duke
parents:
diff changeset
665 public VMRegImpl getVMRegImplInfo() {
a61af66fc99e Initial load
duke
parents:
diff changeset
666 if (vmregImpl == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
667 vmregImpl = new VMRegImpl();
a61af66fc99e Initial load
duke
parents:
diff changeset
668 }
a61af66fc99e Initial load
duke
parents:
diff changeset
669 return vmregImpl;
a61af66fc99e Initial load
duke
parents:
diff changeset
670 }
a61af66fc99e Initial load
duke
parents:
diff changeset
671
a61af66fc99e Initial load
duke
parents:
diff changeset
672 public Bytes getBytes() {
a61af66fc99e Initial load
duke
parents:
diff changeset
673 if (bytes == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
674 bytes = new Bytes(debugger.getMachineDescription());
a61af66fc99e Initial load
duke
parents:
diff changeset
675 }
a61af66fc99e Initial load
duke
parents:
diff changeset
676 return bytes;
a61af66fc99e Initial load
duke
parents:
diff changeset
677 }
a61af66fc99e Initial load
duke
parents:
diff changeset
678
331
cecd8eb4e0ca 6706829: Compressed Oops: add debug info for narrow oops
kvn
parents: 196
diff changeset
679 /** Returns true if this is a isBigEndian, false otherwise */
cecd8eb4e0ca 6706829: Compressed Oops: add debug info for narrow oops
kvn
parents: 196
diff changeset
680 public boolean isBigEndian() {
cecd8eb4e0ca 6706829: Compressed Oops: add debug info for narrow oops
kvn
parents: 196
diff changeset
681 return isBigEndian;
cecd8eb4e0ca 6706829: Compressed Oops: add debug info for narrow oops
kvn
parents: 196
diff changeset
682 }
cecd8eb4e0ca 6706829: Compressed Oops: add debug info for narrow oops
kvn
parents: 196
diff changeset
683
0
a61af66fc99e Initial load
duke
parents:
diff changeset
684 /** Returns true if this is a "core" build, false if either C1 or C2
a61af66fc99e Initial load
duke
parents:
diff changeset
685 is present */
a61af66fc99e Initial load
duke
parents:
diff changeset
686 public boolean isCore() {
a61af66fc99e Initial load
duke
parents:
diff changeset
687 return (!(usingClientCompiler || usingServerCompiler));
a61af66fc99e Initial load
duke
parents:
diff changeset
688 }
a61af66fc99e Initial load
duke
parents:
diff changeset
689
a61af66fc99e Initial load
duke
parents:
diff changeset
690 /** Returns true if this is a C1 build, false otherwise */
a61af66fc99e Initial load
duke
parents:
diff changeset
691 public boolean isClientCompiler() {
a61af66fc99e Initial load
duke
parents:
diff changeset
692 return usingClientCompiler;
a61af66fc99e Initial load
duke
parents:
diff changeset
693 }
a61af66fc99e Initial load
duke
parents:
diff changeset
694
a61af66fc99e Initial load
duke
parents:
diff changeset
695 /** Returns true if this is a C2 build, false otherwise */
a61af66fc99e Initial load
duke
parents:
diff changeset
696 public boolean isServerCompiler() {
a61af66fc99e Initial load
duke
parents:
diff changeset
697 return usingServerCompiler;
a61af66fc99e Initial load
duke
parents:
diff changeset
698 }
a61af66fc99e Initial load
duke
parents:
diff changeset
699
a61af66fc99e Initial load
duke
parents:
diff changeset
700 /** Returns true if C2 derived pointer table should be used, false otherwise */
a61af66fc99e Initial load
duke
parents:
diff changeset
701 public boolean useDerivedPointerTable() {
a61af66fc99e Initial load
duke
parents:
diff changeset
702 return !disableDerivedPrinterTableCheck;
a61af66fc99e Initial load
duke
parents:
diff changeset
703 }
a61af66fc99e Initial load
duke
parents:
diff changeset
704
a61af66fc99e Initial load
duke
parents:
diff changeset
705 /** Returns the code cache; should not be used if is core build */
a61af66fc99e Initial load
duke
parents:
diff changeset
706 public CodeCache getCodeCache() {
a61af66fc99e Initial load
duke
parents:
diff changeset
707 if (Assert.ASSERTS_ENABLED) {
a61af66fc99e Initial load
duke
parents:
diff changeset
708 Assert.that(!isCore(), "noncore builds only");
a61af66fc99e Initial load
duke
parents:
diff changeset
709 }
a61af66fc99e Initial load
duke
parents:
diff changeset
710 if (codeCache == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
711 codeCache = new CodeCache();
a61af66fc99e Initial load
duke
parents:
diff changeset
712 }
a61af66fc99e Initial load
duke
parents:
diff changeset
713 return codeCache;
a61af66fc99e Initial load
duke
parents:
diff changeset
714 }
a61af66fc99e Initial load
duke
parents:
diff changeset
715
a61af66fc99e Initial load
duke
parents:
diff changeset
716 /** Should only be called for C1 builds */
a61af66fc99e Initial load
duke
parents:
diff changeset
717 public Runtime1 getRuntime1() {
a61af66fc99e Initial load
duke
parents:
diff changeset
718 if (Assert.ASSERTS_ENABLED) {
a61af66fc99e Initial load
duke
parents:
diff changeset
719 Assert.that(isClientCompiler(), "C1 builds only");
a61af66fc99e Initial load
duke
parents:
diff changeset
720 }
a61af66fc99e Initial load
duke
parents:
diff changeset
721 if (runtime1 == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
722 runtime1 = new Runtime1();
a61af66fc99e Initial load
duke
parents:
diff changeset
723 }
a61af66fc99e Initial load
duke
parents:
diff changeset
724 return runtime1;
a61af66fc99e Initial load
duke
parents:
diff changeset
725 }
a61af66fc99e Initial load
duke
parents:
diff changeset
726
a61af66fc99e Initial load
duke
parents:
diff changeset
727 /** Test to see whether we're in debugging mode (NOTE: this really
a61af66fc99e Initial load
duke
parents:
diff changeset
728 should not be tested by this code; currently only used in
a61af66fc99e Initial load
duke
parents:
diff changeset
729 StackFrameStream) */
a61af66fc99e Initial load
duke
parents:
diff changeset
730 public boolean isDebugging() {
a61af66fc99e Initial load
duke
parents:
diff changeset
731 return (debugger != null);
a61af66fc99e Initial load
duke
parents:
diff changeset
732 }
a61af66fc99e Initial load
duke
parents:
diff changeset
733
a61af66fc99e Initial load
duke
parents:
diff changeset
734 /** This is only used by the debugging (i.e., non-runtime) system */
a61af66fc99e Initial load
duke
parents:
diff changeset
735 public JVMDebugger getDebugger() {
a61af66fc99e Initial load
duke
parents:
diff changeset
736 if (debugger == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
737 throw new RuntimeException("Attempt to use debugger in runtime system");
a61af66fc99e Initial load
duke
parents:
diff changeset
738 }
a61af66fc99e Initial load
duke
parents:
diff changeset
739 return debugger;
a61af66fc99e Initial load
duke
parents:
diff changeset
740 }
a61af66fc99e Initial load
duke
parents:
diff changeset
741
a61af66fc99e Initial load
duke
parents:
diff changeset
742 /** Indicates whether a given program counter is in Java code. This
a61af66fc99e Initial load
duke
parents:
diff changeset
743 includes but is not spanned by the interpreter and code cache.
a61af66fc99e Initial load
duke
parents:
diff changeset
744 Only used in the debugging system, for implementing
a61af66fc99e Initial load
duke
parents:
diff changeset
745 JavaThread.currentFrameGuess() on x86. */
a61af66fc99e Initial load
duke
parents:
diff changeset
746 public boolean isJavaPCDbg(Address addr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
747 // FIXME: this is not a complete enough set: must include areas
a61af66fc99e Initial load
duke
parents:
diff changeset
748 // like vtable stubs
a61af66fc99e Initial load
duke
parents:
diff changeset
749 return (getInterpreter().contains(addr) ||
a61af66fc99e Initial load
duke
parents:
diff changeset
750 getCodeCache().contains(addr));
a61af66fc99e Initial load
duke
parents:
diff changeset
751 }
a61af66fc99e Initial load
duke
parents:
diff changeset
752
a61af66fc99e Initial load
duke
parents:
diff changeset
753 /** FIXME: figure out where to stick this */
a61af66fc99e Initial load
duke
parents:
diff changeset
754 public int getInvocationEntryBCI() {
a61af66fc99e Initial load
duke
parents:
diff changeset
755 return invocationEntryBCI;
a61af66fc99e Initial load
duke
parents:
diff changeset
756 }
a61af66fc99e Initial load
duke
parents:
diff changeset
757
a61af66fc99e Initial load
duke
parents:
diff changeset
758 /** FIXME: figure out where to stick this */
a61af66fc99e Initial load
duke
parents:
diff changeset
759 public int getInvalidOSREntryBCI() {
a61af66fc99e Initial load
duke
parents:
diff changeset
760 return invalidOSREntryBCI;
a61af66fc99e Initial load
duke
parents:
diff changeset
761 }
a61af66fc99e Initial load
duke
parents:
diff changeset
762
a61af66fc99e Initial load
duke
parents:
diff changeset
763 // FIXME: figure out where to stick this
a61af66fc99e Initial load
duke
parents:
diff changeset
764 public boolean wizardMode() {
a61af66fc99e Initial load
duke
parents:
diff changeset
765 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
766 }
a61af66fc99e Initial load
duke
parents:
diff changeset
767
a61af66fc99e Initial load
duke
parents:
diff changeset
768 public ReversePtrs getRevPtrs() {
a61af66fc99e Initial load
duke
parents:
diff changeset
769 return revPtrs;
a61af66fc99e Initial load
duke
parents:
diff changeset
770 }
a61af66fc99e Initial load
duke
parents:
diff changeset
771
a61af66fc99e Initial load
duke
parents:
diff changeset
772 public void setRevPtrs(ReversePtrs rp) {
a61af66fc99e Initial load
duke
parents:
diff changeset
773 revPtrs = rp;
a61af66fc99e Initial load
duke
parents:
diff changeset
774 }
a61af66fc99e Initial load
duke
parents:
diff changeset
775
a61af66fc99e Initial load
duke
parents:
diff changeset
776 // returns null, if not available.
a61af66fc99e Initial load
duke
parents:
diff changeset
777 public String getVMRelease() {
a61af66fc99e Initial load
duke
parents:
diff changeset
778 return vmRelease;
a61af66fc99e Initial load
duke
parents:
diff changeset
779 }
a61af66fc99e Initial load
duke
parents:
diff changeset
780
a61af66fc99e Initial load
duke
parents:
diff changeset
781 // returns null, if not available.
a61af66fc99e Initial load
duke
parents:
diff changeset
782 public String getVMInternalInfo() {
a61af66fc99e Initial load
duke
parents:
diff changeset
783 return vmInternalInfo;
a61af66fc99e Initial load
duke
parents:
diff changeset
784 }
a61af66fc99e Initial load
duke
parents:
diff changeset
785
8005
ec0c4951286c 8004710: NPG: jmap could throw sun.jvm.hotspot.types.WrongTypeException after PermGen removal
stefank
parents: 6848
diff changeset
786 public int getReserveForAllocationPrefetch() {
ec0c4951286c 8004710: NPG: jmap could throw sun.jvm.hotspot.types.WrongTypeException after PermGen removal
stefank
parents: 6848
diff changeset
787 return reserveForAllocationPrefetch;
ec0c4951286c 8004710: NPG: jmap could throw sun.jvm.hotspot.types.WrongTypeException after PermGen removal
stefank
parents: 6848
diff changeset
788 }
ec0c4951286c 8004710: NPG: jmap could throw sun.jvm.hotspot.types.WrongTypeException after PermGen removal
stefank
parents: 6848
diff changeset
789
0
a61af66fc99e Initial load
duke
parents:
diff changeset
790 public boolean isSharingEnabled() {
a61af66fc99e Initial load
duke
parents:
diff changeset
791 if (sharingEnabled == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
792 Flag flag = getCommandLineFlag("UseSharedSpaces");
a61af66fc99e Initial load
duke
parents:
diff changeset
793 sharingEnabled = (flag == null)? Boolean.FALSE :
a61af66fc99e Initial load
duke
parents:
diff changeset
794 (flag.getBool()? Boolean.TRUE: Boolean.FALSE);
a61af66fc99e Initial load
duke
parents:
diff changeset
795 }
a61af66fc99e Initial load
duke
parents:
diff changeset
796 return sharingEnabled.booleanValue();
a61af66fc99e Initial load
duke
parents:
diff changeset
797 }
a61af66fc99e Initial load
duke
parents:
diff changeset
798
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
799 public boolean isCompressedOopsEnabled() {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
800 if (compressedOopsEnabled == null) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
801 Flag flag = getCommandLineFlag("UseCompressedOops");
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
802 compressedOopsEnabled = (flag == null) ? Boolean.FALSE:
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
803 (flag.getBool()? Boolean.TRUE: Boolean.FALSE);
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
804 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
805 return compressedOopsEnabled.booleanValue();
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 0
diff changeset
806 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
807
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
808 public boolean isCompressedKlassPointersEnabled() {
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
809 if (compressedKlassPointersEnabled == null) {
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
810 Flag flag = getCommandLineFlag("UseCompressedKlassPointers");
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
811 compressedKlassPointersEnabled = (flag == null) ? Boolean.FALSE:
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
812 (flag.getBool()? Boolean.TRUE: Boolean.FALSE);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
813 }
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6782
diff changeset
814 return compressedKlassPointersEnabled.booleanValue();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
815 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6641
diff changeset
816
1571
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
817 public int getObjectAlignmentInBytes() {
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
818 if (objectAlignmentInBytes == 0) {
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
819 Flag flag = getCommandLineFlag("ObjectAlignmentInBytes");
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
820 objectAlignmentInBytes = (flag == null) ? 8 : (int)flag.getIntx();
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
821 }
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
822 return objectAlignmentInBytes;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
823 }
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 844
diff changeset
824
0
a61af66fc99e Initial load
duke
parents:
diff changeset
825 // returns null, if not available.
a61af66fc99e Initial load
duke
parents:
diff changeset
826 public Flag[] getCommandLineFlags() {
a61af66fc99e Initial load
duke
parents:
diff changeset
827 if (commandLineFlags == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
828 readCommandLineFlags();
a61af66fc99e Initial load
duke
parents:
diff changeset
829 }
a61af66fc99e Initial load
duke
parents:
diff changeset
830
a61af66fc99e Initial load
duke
parents:
diff changeset
831 return commandLineFlags;
a61af66fc99e Initial load
duke
parents:
diff changeset
832 }
a61af66fc99e Initial load
duke
parents:
diff changeset
833
a61af66fc99e Initial load
duke
parents:
diff changeset
834 public Flag getCommandLineFlag(String name) {
a61af66fc99e Initial load
duke
parents:
diff changeset
835 if (flagsMap == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
836 flagsMap = new HashMap();
a61af66fc99e Initial load
duke
parents:
diff changeset
837 Flag[] flags = getCommandLineFlags();
a61af66fc99e Initial load
duke
parents:
diff changeset
838 for (int i = 0; i < flags.length; i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
839 flagsMap.put(flags[i].getName(), flags[i]);
a61af66fc99e Initial load
duke
parents:
diff changeset
840 }
a61af66fc99e Initial load
duke
parents:
diff changeset
841 }
a61af66fc99e Initial load
duke
parents:
diff changeset
842 return (Flag) flagsMap.get(name);
a61af66fc99e Initial load
duke
parents:
diff changeset
843 }
a61af66fc99e Initial load
duke
parents:
diff changeset
844
a61af66fc99e Initial load
duke
parents:
diff changeset
845 private void readCommandLineFlags() {
a61af66fc99e Initial load
duke
parents:
diff changeset
846 // get command line flags
a61af66fc99e Initial load
duke
parents:
diff changeset
847 TypeDataBase db = getTypeDataBase();
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
848 Type flagType = db.lookupType("Flag");
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
849 int numFlags = (int) flagType.getCIntegerField("numFlags").getValue();
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
850 // NOTE: last flag contains null values.
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
851 commandLineFlags = new Flag[numFlags - 1];
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
852
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
853 Address flagAddr = flagType.getAddressField("flags").getValue();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
854
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
855 AddressField typeFld = flagType.getAddressField("type");
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
856 AddressField nameFld = flagType.getAddressField("name");
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
857 AddressField addrFld = flagType.getAddressField("addr");
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
858 AddressField kindFld = flagType.getAddressField("kind");
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
859 CIntField originFld = new CIntField(flagType.getCIntegerField("origin"), 0);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
860
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
861 long flagSize = flagType.getSize(); // sizeof(Flag)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
862
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
863 // NOTE: last flag contains null values.
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
864 for (int f = 0; f < numFlags - 1; f++) {
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
865 String type = CStringUtilities.getString(typeFld.getValue(flagAddr));
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
866 String name = CStringUtilities.getString(nameFld.getValue(flagAddr));
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
867 Address addr = addrFld.getValue(flagAddr);
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
868 String kind = CStringUtilities.getString(kindFld.getValue(flagAddr));
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
869 int origin = (int)originFld.getValue(flagAddr);
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
870 commandLineFlags[f] = new Flag(type, name, addr, kind, origin);
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
871 flagAddr = flagAddr.addOffsetTo(flagSize);
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
872 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
873
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
874 // sort flags by name
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
875 Arrays.sort(commandLineFlags, new Comparator() {
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
876 public int compare(Object o1, Object o2) {
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
877 Flag f1 = (Flag) o1;
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
878 Flag f2 = (Flag) o2;
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
879 return f1.getName().compareTo(f2.getName());
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
880 }
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 3908
diff changeset
881 });
0
a61af66fc99e Initial load
duke
parents:
diff changeset
882 }
a61af66fc99e Initial load
duke
parents:
diff changeset
883
a61af66fc99e Initial load
duke
parents:
diff changeset
884 public String getSystemProperty(String key) {
a61af66fc99e Initial load
duke
parents:
diff changeset
885 Properties props = getSystemProperties();
a61af66fc99e Initial load
duke
parents:
diff changeset
886 return (props != null)? props.getProperty(key) : null;
a61af66fc99e Initial load
duke
parents:
diff changeset
887 }
a61af66fc99e Initial load
duke
parents:
diff changeset
888
a61af66fc99e Initial load
duke
parents:
diff changeset
889 public Properties getSystemProperties() {
a61af66fc99e Initial load
duke
parents:
diff changeset
890 if (sysProps == null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
891 readSystemProperties();
a61af66fc99e Initial load
duke
parents:
diff changeset
892 }
a61af66fc99e Initial load
duke
parents:
diff changeset
893 return sysProps;
a61af66fc99e Initial load
duke
parents:
diff changeset
894 }
a61af66fc99e Initial load
duke
parents:
diff changeset
895
a61af66fc99e Initial load
duke
parents:
diff changeset
896 private void readSystemProperties() {
2411
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
897 final InstanceKlass systemKls = getSystemDictionary().getSystemKlass();
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
898 systemKls.iterateStaticFields(new DefaultOopVisitor() {
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
899 ObjectReader objReader = new ObjectReader();
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
900 public void doOop(sun.jvm.hotspot.oops.OopField field, boolean isVMField) {
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
901 if (field.getID().getName().equals("props")) {
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
902 try {
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
903 sysProps = (Properties) objReader.readObject(field.getValue(getObj()));
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
904 } catch (Exception e) {
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
905 e.printStackTrace();
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
906 }
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
907 }
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
908 }
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
909 });
0
a61af66fc99e Initial load
duke
parents:
diff changeset
910 }
a61af66fc99e Initial load
duke
parents:
diff changeset
911 }