annotate src/share/vm/ci/ciObject.cpp @ 3762:5c0a3c1858b1

7048782: CMS: assert(last_chunk_index_to_check<= last_chunk_index) failed: parCardTableModRefBS.cpp:359 Summary: The LNC array is sized before the start of a scavenge, while the heap may expand during a scavenge. With CMS, the last block of an arbitrary suffice of the LNC array may expand due to coalition with the expansion delta. We now take care not to attempt access past the end of the LNC array. LNC array code will be cleaned up and suitably encapsulated as part of the forthcoming performance RFE 7043675. Reviewed-by: brutisso
author ysr
date Thu, 02 Jun 2011 10:23:36 -0700
parents 01fd6090fdd8
children 28a9fe9534ea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
2 * Copyright (c) 1999, 2010, 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: 989
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 989
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: 989
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
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26 #include "ci/ciObject.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27 #include "ci/ciUtilities.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
28 #include "gc_interface/collectedHeap.inline.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
29 #include "oops/oop.inline2.hpp"
0
a61af66fc99e Initial load
duke
parents:
diff changeset
30
a61af66fc99e Initial load
duke
parents:
diff changeset
31 // ciObject
a61af66fc99e Initial load
duke
parents:
diff changeset
32 //
a61af66fc99e Initial load
duke
parents:
diff changeset
33 // This class represents an oop in the HotSpot virtual machine.
a61af66fc99e Initial load
duke
parents:
diff changeset
34 // Its subclasses are structured in a hierarchy which mirrors
a61af66fc99e Initial load
duke
parents:
diff changeset
35 // an aggregate of the VM's oop and klass hierarchies (see
a61af66fc99e Initial load
duke
parents:
diff changeset
36 // oopHierarchy.hpp). Each instance of ciObject holds a handle
a61af66fc99e Initial load
duke
parents:
diff changeset
37 // to a corresponding oop on the VM side and provides routines
a61af66fc99e Initial load
duke
parents:
diff changeset
38 // for accessing the information in its oop. By using the ciObject
a61af66fc99e Initial load
duke
parents:
diff changeset
39 // hierarchy for accessing oops in the VM, the compiler ensures
a61af66fc99e Initial load
duke
parents:
diff changeset
40 // that it is safe with respect to garbage collection; that is,
a61af66fc99e Initial load
duke
parents:
diff changeset
41 // GC and compilation can proceed independently without
a61af66fc99e Initial load
duke
parents:
diff changeset
42 // interference.
a61af66fc99e Initial load
duke
parents:
diff changeset
43 //
a61af66fc99e Initial load
duke
parents:
diff changeset
44 // Within the VM, the oop and klass hierarchies are separate.
a61af66fc99e Initial load
duke
parents:
diff changeset
45 // The compiler interface does not preserve this separation --
a61af66fc99e Initial load
duke
parents:
diff changeset
46 // the distinction between `klassOop' and `Klass' are not
a61af66fc99e Initial load
duke
parents:
diff changeset
47 // reflected in the interface and instead the Klass hierarchy
a61af66fc99e Initial load
duke
parents:
diff changeset
48 // is directly modeled as the subclasses of ciKlass.
a61af66fc99e Initial load
duke
parents:
diff changeset
49
a61af66fc99e Initial load
duke
parents:
diff changeset
50 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
51 // ciObject::ciObject
a61af66fc99e Initial load
duke
parents:
diff changeset
52 ciObject::ciObject(oop o) {
a61af66fc99e Initial load
duke
parents:
diff changeset
53 ASSERT_IN_VM;
a61af66fc99e Initial load
duke
parents:
diff changeset
54 if (ciObjectFactory::is_initialized()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
55 _handle = JNIHandles::make_local(o);
a61af66fc99e Initial load
duke
parents:
diff changeset
56 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
57 _handle = JNIHandles::make_global(o);
a61af66fc99e Initial load
duke
parents:
diff changeset
58 }
a61af66fc99e Initial load
duke
parents:
diff changeset
59 _klass = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
60 _ident = 0;
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
61 init_flags_from(o);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
62 }
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
65 // ciObject::ciObject
a61af66fc99e Initial load
duke
parents:
diff changeset
66 //
a61af66fc99e Initial load
duke
parents:
diff changeset
67 ciObject::ciObject(Handle h) {
a61af66fc99e Initial load
duke
parents:
diff changeset
68 ASSERT_IN_VM;
a61af66fc99e Initial load
duke
parents:
diff changeset
69 if (ciObjectFactory::is_initialized()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
70 _handle = JNIHandles::make_local(h());
a61af66fc99e Initial load
duke
parents:
diff changeset
71 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
72 _handle = JNIHandles::make_global(h);
a61af66fc99e Initial load
duke
parents:
diff changeset
73 }
a61af66fc99e Initial load
duke
parents:
diff changeset
74 _klass = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
75 _ident = 0;
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
76 init_flags_from(h());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
77 }
a61af66fc99e Initial load
duke
parents:
diff changeset
78
a61af66fc99e Initial load
duke
parents:
diff changeset
79 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
80 // ciObject::ciObject
a61af66fc99e Initial load
duke
parents:
diff changeset
81 //
a61af66fc99e Initial load
duke
parents:
diff changeset
82 // Unloaded klass/method variant. `klass' is the klass of the unloaded
a61af66fc99e Initial load
duke
parents:
diff changeset
83 // klass/method, if that makes sense.
a61af66fc99e Initial load
duke
parents:
diff changeset
84 ciObject::ciObject(ciKlass* klass) {
a61af66fc99e Initial load
duke
parents:
diff changeset
85 ASSERT_IN_VM;
a61af66fc99e Initial load
duke
parents:
diff changeset
86 assert(klass != NULL, "must supply klass");
a61af66fc99e Initial load
duke
parents:
diff changeset
87 _handle = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
88 _klass = klass;
a61af66fc99e Initial load
duke
parents:
diff changeset
89 _ident = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
90 }
a61af66fc99e Initial load
duke
parents:
diff changeset
91
a61af66fc99e Initial load
duke
parents:
diff changeset
92 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
93 // ciObject::ciObject
a61af66fc99e Initial load
duke
parents:
diff changeset
94 //
a61af66fc99e Initial load
duke
parents:
diff changeset
95 // NULL variant. Used only by ciNullObject.
a61af66fc99e Initial load
duke
parents:
diff changeset
96 ciObject::ciObject() {
a61af66fc99e Initial load
duke
parents:
diff changeset
97 ASSERT_IN_VM;
a61af66fc99e Initial load
duke
parents:
diff changeset
98 _handle = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
99 _klass = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
100 _ident = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
101 }
a61af66fc99e Initial load
duke
parents:
diff changeset
102
a61af66fc99e Initial load
duke
parents:
diff changeset
103 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
104 // ciObject::klass
a61af66fc99e Initial load
duke
parents:
diff changeset
105 //
a61af66fc99e Initial load
duke
parents:
diff changeset
106 // Get the ciKlass of this ciObject.
a61af66fc99e Initial load
duke
parents:
diff changeset
107 ciKlass* ciObject::klass() {
a61af66fc99e Initial load
duke
parents:
diff changeset
108 if (_klass == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
109 if (_handle == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
110 // When both _klass and _handle are NULL, we are dealing
a61af66fc99e Initial load
duke
parents:
diff changeset
111 // with the distinguished instance of ciNullObject.
a61af66fc99e Initial load
duke
parents:
diff changeset
112 // No one should ask it for its klass.
a61af66fc99e Initial load
duke
parents:
diff changeset
113 assert(is_null_object(), "must be null object");
a61af66fc99e Initial load
duke
parents:
diff changeset
114 ShouldNotReachHere();
a61af66fc99e Initial load
duke
parents:
diff changeset
115 return NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
116 }
a61af66fc99e Initial load
duke
parents:
diff changeset
117
a61af66fc99e Initial load
duke
parents:
diff changeset
118 GUARDED_VM_ENTRY(
a61af66fc99e Initial load
duke
parents:
diff changeset
119 oop o = get_oop();
a61af66fc99e Initial load
duke
parents:
diff changeset
120 _klass = CURRENT_ENV->get_object(o->klass())->as_klass();
a61af66fc99e Initial load
duke
parents:
diff changeset
121 );
a61af66fc99e Initial load
duke
parents:
diff changeset
122 }
a61af66fc99e Initial load
duke
parents:
diff changeset
123 return _klass;
a61af66fc99e Initial load
duke
parents:
diff changeset
124 }
a61af66fc99e Initial load
duke
parents:
diff changeset
125
a61af66fc99e Initial load
duke
parents:
diff changeset
126 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
127 // ciObject::set_ident
a61af66fc99e Initial load
duke
parents:
diff changeset
128 //
a61af66fc99e Initial load
duke
parents:
diff changeset
129 // Set the unique identity number of a ciObject.
a61af66fc99e Initial load
duke
parents:
diff changeset
130 void ciObject::set_ident(uint id) {
a61af66fc99e Initial load
duke
parents:
diff changeset
131 assert((_ident >> FLAG_BITS) == 0, "must only initialize once");
a61af66fc99e Initial load
duke
parents:
diff changeset
132 assert( id < ((uint)1 << (BitsPerInt-FLAG_BITS)), "id too big");
a61af66fc99e Initial load
duke
parents:
diff changeset
133 _ident = _ident + (id << FLAG_BITS);
a61af66fc99e Initial load
duke
parents:
diff changeset
134 }
a61af66fc99e Initial load
duke
parents:
diff changeset
135
a61af66fc99e Initial load
duke
parents:
diff changeset
136 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
137 // ciObject::ident
a61af66fc99e Initial load
duke
parents:
diff changeset
138 //
a61af66fc99e Initial load
duke
parents:
diff changeset
139 // Report the unique identity number of a ciObject.
a61af66fc99e Initial load
duke
parents:
diff changeset
140 uint ciObject::ident() {
a61af66fc99e Initial load
duke
parents:
diff changeset
141 uint id = _ident >> FLAG_BITS;
a61af66fc99e Initial load
duke
parents:
diff changeset
142 assert(id != 0, "must be initialized");
a61af66fc99e Initial load
duke
parents:
diff changeset
143 return id;
a61af66fc99e Initial load
duke
parents:
diff changeset
144 }
a61af66fc99e Initial load
duke
parents:
diff changeset
145
a61af66fc99e Initial load
duke
parents:
diff changeset
146 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
147 // ciObject::equals
a61af66fc99e Initial load
duke
parents:
diff changeset
148 //
a61af66fc99e Initial load
duke
parents:
diff changeset
149 // Are two ciObjects equal?
a61af66fc99e Initial load
duke
parents:
diff changeset
150 bool ciObject::equals(ciObject* obj) {
a61af66fc99e Initial load
duke
parents:
diff changeset
151 return (this == obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
152 }
a61af66fc99e Initial load
duke
parents:
diff changeset
153
a61af66fc99e Initial load
duke
parents:
diff changeset
154 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
155 // ciObject::hash
a61af66fc99e Initial load
duke
parents:
diff changeset
156 //
a61af66fc99e Initial load
duke
parents:
diff changeset
157 // A hash value for the convenience of compilers.
a61af66fc99e Initial load
duke
parents:
diff changeset
158 //
a61af66fc99e Initial load
duke
parents:
diff changeset
159 // Implementation note: we use the address of the ciObject as the
a61af66fc99e Initial load
duke
parents:
diff changeset
160 // basis for the hash. Use the _ident field, which is well-behaved.
a61af66fc99e Initial load
duke
parents:
diff changeset
161 int ciObject::hash() {
a61af66fc99e Initial load
duke
parents:
diff changeset
162 return ident() * 31;
a61af66fc99e Initial load
duke
parents:
diff changeset
163 }
a61af66fc99e Initial load
duke
parents:
diff changeset
164
a61af66fc99e Initial load
duke
parents:
diff changeset
165 // ------------------------------------------------------------------
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
166 // ciObject::constant_encoding
0
a61af66fc99e Initial load
duke
parents:
diff changeset
167 //
a61af66fc99e Initial load
duke
parents:
diff changeset
168 // The address which the compiler should embed into the
a61af66fc99e Initial load
duke
parents:
diff changeset
169 // generated code to represent this oop. This address
a61af66fc99e Initial load
duke
parents:
diff changeset
170 // is not the true address of the oop -- it will get patched
a61af66fc99e Initial load
duke
parents:
diff changeset
171 // during nmethod creation.
a61af66fc99e Initial load
duke
parents:
diff changeset
172 //
a61af66fc99e Initial load
duke
parents:
diff changeset
173 //
a61af66fc99e Initial load
duke
parents:
diff changeset
174 //
a61af66fc99e Initial load
duke
parents:
diff changeset
175 // Implementation note: we use the handle as the encoding. The
a61af66fc99e Initial load
duke
parents:
diff changeset
176 // nmethod constructor resolves the handle and patches in the oop.
a61af66fc99e Initial load
duke
parents:
diff changeset
177 //
a61af66fc99e Initial load
duke
parents:
diff changeset
178 // This method should be changed to return an generified address
a61af66fc99e Initial load
duke
parents:
diff changeset
179 // to discourage use of the JNI handle.
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
180 jobject ciObject::constant_encoding() {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
181 assert(is_null_object() || handle() != NULL, "cannot embed null pointer");
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
182 assert(can_be_constant(), "oop must be NULL or perm");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
183 return handle();
a61af66fc99e Initial load
duke
parents:
diff changeset
184 }
a61af66fc99e Initial load
duke
parents:
diff changeset
185
a61af66fc99e Initial load
duke
parents:
diff changeset
186 // ------------------------------------------------------------------
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
187 // ciObject::can_be_constant
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
188 bool ciObject::can_be_constant() {
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
189 if (ScavengeRootsInCode >= 1) return true; // now everybody can encode as a constant
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
190 return handle() == NULL || !is_scavengable();
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
191 }
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
192
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
193 // ------------------------------------------------------------------
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
194 // ciObject::should_be_constant()
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
195 bool ciObject::should_be_constant() {
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
196 if (ScavengeRootsInCode >= 2) return true; // force everybody to be a constant
3283
01fd6090fdd8 7032162: assert(flat != TypePtr::BOTTOM) failed: cannot alias-analyze an untyped ptr
never
parents: 1972
diff changeset
197 if (!JavaObjectsInPerm && !is_null_object()) {
01fd6090fdd8 7032162: assert(flat != TypePtr::BOTTOM) failed: cannot alias-analyze an untyped ptr
never
parents: 1972
diff changeset
198 // We want Strings and Classes to be embeddable by default since
01fd6090fdd8 7032162: assert(flat != TypePtr::BOTTOM) failed: cannot alias-analyze an untyped ptr
never
parents: 1972
diff changeset
199 // they used to be in the perm world. Not all Strings used to be
01fd6090fdd8 7032162: assert(flat != TypePtr::BOTTOM) failed: cannot alias-analyze an untyped ptr
never
parents: 1972
diff changeset
200 // embeddable but there's no easy way to distinguish the interned
01fd6090fdd8 7032162: assert(flat != TypePtr::BOTTOM) failed: cannot alias-analyze an untyped ptr
never
parents: 1972
diff changeset
201 // from the regulars ones so just treat them all that way.
01fd6090fdd8 7032162: assert(flat != TypePtr::BOTTOM) failed: cannot alias-analyze an untyped ptr
never
parents: 1972
diff changeset
202 ciEnv* env = CURRENT_ENV;
01fd6090fdd8 7032162: assert(flat != TypePtr::BOTTOM) failed: cannot alias-analyze an untyped ptr
never
parents: 1972
diff changeset
203 if (klass() == env->String_klass() || klass() == env->Class_klass()) {
01fd6090fdd8 7032162: assert(flat != TypePtr::BOTTOM) failed: cannot alias-analyze an untyped ptr
never
parents: 1972
diff changeset
204 return true;
01fd6090fdd8 7032162: assert(flat != TypePtr::BOTTOM) failed: cannot alias-analyze an untyped ptr
never
parents: 1972
diff changeset
205 }
01fd6090fdd8 7032162: assert(flat != TypePtr::BOTTOM) failed: cannot alias-analyze an untyped ptr
never
parents: 1972
diff changeset
206 }
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
207 return handle() == NULL || !is_scavengable();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
208 }
a61af66fc99e Initial load
duke
parents:
diff changeset
209
a61af66fc99e Initial load
duke
parents:
diff changeset
210
a61af66fc99e Initial load
duke
parents:
diff changeset
211 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
212 // ciObject::print
a61af66fc99e Initial load
duke
parents:
diff changeset
213 //
a61af66fc99e Initial load
duke
parents:
diff changeset
214 // Print debugging output about this ciObject.
a61af66fc99e Initial load
duke
parents:
diff changeset
215 //
a61af66fc99e Initial load
duke
parents:
diff changeset
216 // Implementation note: dispatch to the virtual print_impl behavior
a61af66fc99e Initial load
duke
parents:
diff changeset
217 // for this ciObject.
a61af66fc99e Initial load
duke
parents:
diff changeset
218 void ciObject::print(outputStream* st) {
a61af66fc99e Initial load
duke
parents:
diff changeset
219 st->print("<%s", type_string());
a61af66fc99e Initial load
duke
parents:
diff changeset
220 GUARDED_VM_ENTRY(print_impl(st);)
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
221 st->print(" ident=%d %s%s address=0x%x>", ident(),
0
a61af66fc99e Initial load
duke
parents:
diff changeset
222 is_perm() ? "PERM" : "",
989
148e5441d916 6863023: need non-perm oops in code cache for JSR 292
jrose
parents: 0
diff changeset
223 is_scavengable() ? "SCAVENGABLE" : "",
0
a61af66fc99e Initial load
duke
parents:
diff changeset
224 (address)this);
a61af66fc99e Initial load
duke
parents:
diff changeset
225 }
a61af66fc99e Initial load
duke
parents:
diff changeset
226
a61af66fc99e Initial load
duke
parents:
diff changeset
227 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
228 // ciObject::print_oop
a61af66fc99e Initial load
duke
parents:
diff changeset
229 //
a61af66fc99e Initial load
duke
parents:
diff changeset
230 // Print debugging output about the oop this ciObject represents.
a61af66fc99e Initial load
duke
parents:
diff changeset
231 void ciObject::print_oop(outputStream* st) {
a61af66fc99e Initial load
duke
parents:
diff changeset
232 if (is_null_object()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
233 st->print_cr("NULL");
a61af66fc99e Initial load
duke
parents:
diff changeset
234 } else if (!is_loaded()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
235 st->print_cr("UNLOADED");
a61af66fc99e Initial load
duke
parents:
diff changeset
236 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
237 GUARDED_VM_ENTRY(get_oop()->print_on(st);)
a61af66fc99e Initial load
duke
parents:
diff changeset
238 }
a61af66fc99e Initial load
duke
parents:
diff changeset
239 }