Mercurial > hg > truffle
annotate src/share/vm/oops/oop.hpp @ 4181:319860ae697a
Simplify FrameMap: make offsets of spill slots and outgoing parameters independent so that they can be allocated at the same time, eliminating the separate phases. This makes the separate StackBlock unnecesary. Change CiStackSlot to use byte offsets instead of spill slot index. This makes CiTarget.spillSlotSize unnecessary.
author | Christian Wimmer <Christian.Wimmer@Oracle.com> |
---|---|
date | Mon, 02 Jan 2012 14:16:08 -0800 |
parents | b0efc7ee3b31 |
children | b632e80fc9dc |
rev | line source |
---|---|
0 | 1 /* |
2227 | 2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1123
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1123
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:
1123
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_OOPS_OOP_HPP |
26 #define SHARE_VM_OOPS_OOP_HPP | |
27 | |
28 #include "memory/iterator.hpp" | |
29 #include "memory/memRegion.hpp" | |
30 #include "memory/specialized_oop_closures.hpp" | |
31 #include "utilities/top.hpp" | |
32 | |
0 | 33 // oopDesc is the top baseclass for objects classes. The {name}Desc classes describe |
34 // the format of Java objects so the fields can be accessed from C++. | |
35 // oopDesc is abstract. | |
36 // (see oopHierarchy for complete oop class hierarchy) | |
37 // | |
38 // no virtual functions allowed | |
39 | |
40 // store into oop with store check | |
1972 | 41 template <class T> void oop_store(T* p, oop v); |
42 template <class T> void oop_store(volatile T* p, oop v); | |
0 | 43 |
44 // store into oop without store check | |
1972 | 45 template <class T> void oop_store_without_check(T* p, oop v); |
46 template <class T> void oop_store_without_check(volatile T* p, oop v); | |
0 | 47 |
48 extern bool always_do_update_barrier; | |
49 | |
50 // Forward declarations. | |
51 class OopClosure; | |
52 class ScanClosure; | |
53 class FastScanClosure; | |
54 class FilteringClosure; | |
55 class BarrierSet; | |
56 class CMSIsAliveClosure; | |
57 | |
58 class PSPromotionManager; | |
59 class ParCompactionManager; | |
60 | |
61 class oopDesc { | |
62 friend class VMStructs; | |
63 private: | |
64 volatile markOop _mark; | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
65 union _metadata { |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
66 wideKlassOop _klass; |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
67 narrowOop _compressed_klass; |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
68 } _metadata; |
0 | 69 |
70 // Fast access to barrier set. Must be initialized. | |
71 static BarrierSet* _bs; | |
72 | |
73 public: | |
2226
c5a923563727
6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?")
ysr
parents:
2177
diff
changeset
|
74 enum ConcSafeType { |
c5a923563727
6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?")
ysr
parents:
2177
diff
changeset
|
75 IsUnsafeConc = false, |
c5a923563727
6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?")
ysr
parents:
2177
diff
changeset
|
76 IsSafeConc = true |
c5a923563727
6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?")
ysr
parents:
2177
diff
changeset
|
77 }; |
c5a923563727
6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?")
ysr
parents:
2177
diff
changeset
|
78 |
0 | 79 markOop mark() const { return _mark; } |
80 markOop* mark_addr() const { return (markOop*) &_mark; } | |
81 | |
82 void set_mark(volatile markOop m) { _mark = m; } | |
83 | |
84 void release_set_mark(markOop m); | |
85 markOop cas_set_mark(markOop new_mark, markOop old_mark); | |
86 | |
87 // Used only to re-initialize the mark word (e.g., of promoted | |
88 // objects during a GC) -- requires a valid klass pointer | |
89 void init_mark(); | |
90 | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
91 klassOop klass() const; |
167
feeb96a45707
6696264: assert("narrow oop can never be zero") for GCBasher & ParNewGC
coleenp
parents:
135
diff
changeset
|
92 klassOop klass_or_null() const volatile; |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
93 oop* klass_addr(); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
94 narrowOop* compressed_klass_addr(); |
0 | 95 |
96 void set_klass(klassOop k); | |
167
feeb96a45707
6696264: assert("narrow oop can never be zero") for GCBasher & ParNewGC
coleenp
parents:
135
diff
changeset
|
97 |
feeb96a45707
6696264: assert("narrow oop can never be zero") for GCBasher & ParNewGC
coleenp
parents:
135
diff
changeset
|
98 // For klass field compression |
feeb96a45707
6696264: assert("narrow oop can never be zero") for GCBasher & ParNewGC
coleenp
parents:
135
diff
changeset
|
99 int klass_gap() const; |
feeb96a45707
6696264: assert("narrow oop can never be zero") for GCBasher & ParNewGC
coleenp
parents:
135
diff
changeset
|
100 void set_klass_gap(int z); |
0 | 101 // For when the klass pointer is being used as a linked list "next" field. |
102 void set_klass_to_list_ptr(oop k); | |
103 | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
104 // size of object header, aligned to platform wordSize |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
105 static int header_size() { return sizeof(oopDesc)/HeapWordSize; } |
0 | 106 |
107 Klass* blueprint() const; | |
108 | |
109 // Returns whether this is an instance of k or an instance of a subclass of k | |
110 bool is_a(klassOop k) const; | |
111 | |
112 // Returns the actual oop size of the object | |
113 int size(); | |
114 | |
115 // Sometimes (for complicated concurrency-related reasons), it is useful | |
116 // to be able to figure out the size of an object knowing its klass. | |
117 int size_given_klass(Klass* klass); | |
118 | |
119 // Some perm gen objects are not parseble immediately after | |
120 // installation of their klass pointer. | |
121 bool is_parsable(); | |
122 | |
518
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
356
diff
changeset
|
123 // Some perm gen objects that have been allocated and initialized |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
356
diff
changeset
|
124 // can be changed by the VM when not at a safe point (class rededfinition |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
356
diff
changeset
|
125 // is an example). Such objects should not be examined by the |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
356
diff
changeset
|
126 // concurrent processing of a garbage collector if is_conc_safe() |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
356
diff
changeset
|
127 // returns false. |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
356
diff
changeset
|
128 bool is_conc_safe(); |
0af8b0718fc9
6692899: CMS: many vm.parallel_class_loading tests fail with assert "missing Printezis mark"
jmasa
parents:
356
diff
changeset
|
129 |
0 | 130 // type test operations (inlined in oop.inline.h) |
131 bool is_instance() const; | |
2376
c7f3d0b4570f
7017732: move static fields into Class to prepare for perm gen removal
never
parents:
2227
diff
changeset
|
132 bool is_instanceMirror() const; |
0 | 133 bool is_instanceRef() const; |
134 bool is_array() const; | |
135 bool is_objArray() const; | |
136 bool is_klass() const; | |
137 bool is_thread() const; | |
138 bool is_method() const; | |
139 bool is_constMethod() const; | |
140 bool is_methodData() const; | |
141 bool is_constantPool() const; | |
142 bool is_constantPoolCache() const; | |
143 bool is_typeArray() const; | |
144 bool is_javaArray() const; | |
145 bool is_compiledICHolder() const; | |
146 | |
147 private: | |
148 // field addresses in oop | |
149 void* field_base(int offset) const; | |
150 | |
151 jbyte* byte_field_addr(int offset) const; | |
152 jchar* char_field_addr(int offset) const; | |
153 jboolean* bool_field_addr(int offset) const; | |
154 jint* int_field_addr(int offset) const; | |
155 jshort* short_field_addr(int offset) const; | |
156 jlong* long_field_addr(int offset) const; | |
157 jfloat* float_field_addr(int offset) const; | |
158 jdouble* double_field_addr(int offset) const; | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
159 address* address_field_addr(int offset) const; |
0 | 160 |
161 public: | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
162 // Need this as public for garbage collection. |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
163 template <class T> T* obj_field_addr(int offset) const; |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
164 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
165 static bool is_null(oop obj); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
166 static bool is_null(narrowOop obj); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
167 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
168 // Decode an oop pointer from a narrowOop if compressed. |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
169 // These are overloaded for oop and narrowOop as are the other functions |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
170 // below so that they can be called in template functions. |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
171 static oop decode_heap_oop_not_null(oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
172 static oop decode_heap_oop_not_null(narrowOop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
173 static oop decode_heap_oop(oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
174 static oop decode_heap_oop(narrowOop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
175 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
176 // Encode an oop pointer to a narrow oop. The or_null versions accept |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
177 // null oop pointer, others do not in order to eliminate the |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
178 // null checking branches. |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
179 static narrowOop encode_heap_oop_not_null(oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
180 static narrowOop encode_heap_oop(oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
181 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
182 // Load an oop out of the Java heap |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
183 static narrowOop load_heap_oop(narrowOop* p); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
184 static oop load_heap_oop(oop* p); |
0 | 185 |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
186 // Load an oop out of Java heap and decode it to an uncompressed oop. |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
187 static oop load_decode_heap_oop_not_null(narrowOop* p); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
188 static oop load_decode_heap_oop_not_null(oop* p); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
189 static oop load_decode_heap_oop(narrowOop* p); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
190 static oop load_decode_heap_oop(oop* p); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
191 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
192 // Store an oop into the heap. |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
193 static void store_heap_oop(narrowOop* p, narrowOop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
194 static void store_heap_oop(oop* p, oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
195 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
196 // Encode oop if UseCompressedOops and store into the heap. |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
197 static void encode_store_heap_oop_not_null(narrowOop* p, oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
198 static void encode_store_heap_oop_not_null(oop* p, oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
199 static void encode_store_heap_oop(narrowOop* p, oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
200 static void encode_store_heap_oop(oop* p, oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
201 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
202 static void release_store_heap_oop(volatile narrowOop* p, narrowOop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
203 static void release_store_heap_oop(volatile oop* p, oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
204 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
205 static void release_encode_store_heap_oop_not_null(volatile narrowOop* p, oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
206 static void release_encode_store_heap_oop_not_null(volatile oop* p, oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
207 static void release_encode_store_heap_oop(volatile narrowOop* p, oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
208 static void release_encode_store_heap_oop(volatile oop* p, oop v); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
209 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
210 static oop atomic_exchange_oop(oop exchange_value, volatile HeapWord *dest); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
211 static oop atomic_compare_exchange_oop(oop exchange_value, |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
212 volatile HeapWord *dest, |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
213 oop compare_value); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
214 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
215 // Access to fields in a instanceOop through these methods. |
0 | 216 oop obj_field(int offset) const; |
3932
b0efc7ee3b31
7085860: JSR 292: implement CallSite.setTargetNormal and setTargetVolatile as native methods
twisti
parents:
2376
diff
changeset
|
217 volatile oop obj_field_volatile(int offset) const; |
0 | 218 void obj_field_put(int offset, oop value); |
3932
b0efc7ee3b31
7085860: JSR 292: implement CallSite.setTargetNormal and setTargetVolatile as native methods
twisti
parents:
2376
diff
changeset
|
219 void obj_field_put_raw(int offset, oop value); |
b0efc7ee3b31
7085860: JSR 292: implement CallSite.setTargetNormal and setTargetVolatile as native methods
twisti
parents:
2376
diff
changeset
|
220 void obj_field_put_volatile(int offset, oop value); |
0 | 221 |
222 jbyte byte_field(int offset) const; | |
223 void byte_field_put(int offset, jbyte contents); | |
224 | |
225 jchar char_field(int offset) const; | |
226 void char_field_put(int offset, jchar contents); | |
227 | |
228 jboolean bool_field(int offset) const; | |
229 void bool_field_put(int offset, jboolean contents); | |
230 | |
231 jint int_field(int offset) const; | |
232 void int_field_put(int offset, jint contents); | |
233 | |
234 jshort short_field(int offset) const; | |
235 void short_field_put(int offset, jshort contents); | |
236 | |
237 jlong long_field(int offset) const; | |
238 void long_field_put(int offset, jlong contents); | |
239 | |
240 jfloat float_field(int offset) const; | |
241 void float_field_put(int offset, jfloat contents); | |
242 | |
243 jdouble double_field(int offset) const; | |
244 void double_field_put(int offset, jdouble contents); | |
245 | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
246 address address_field(int offset) const; |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
247 void address_field_put(int offset, address contents); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
248 |
0 | 249 oop obj_field_acquire(int offset) const; |
250 void release_obj_field_put(int offset, oop value); | |
251 | |
252 jbyte byte_field_acquire(int offset) const; | |
253 void release_byte_field_put(int offset, jbyte contents); | |
254 | |
255 jchar char_field_acquire(int offset) const; | |
256 void release_char_field_put(int offset, jchar contents); | |
257 | |
258 jboolean bool_field_acquire(int offset) const; | |
259 void release_bool_field_put(int offset, jboolean contents); | |
260 | |
261 jint int_field_acquire(int offset) const; | |
262 void release_int_field_put(int offset, jint contents); | |
263 | |
264 jshort short_field_acquire(int offset) const; | |
265 void release_short_field_put(int offset, jshort contents); | |
266 | |
267 jlong long_field_acquire(int offset) const; | |
268 void release_long_field_put(int offset, jlong contents); | |
269 | |
270 jfloat float_field_acquire(int offset) const; | |
271 void release_float_field_put(int offset, jfloat contents); | |
272 | |
273 jdouble double_field_acquire(int offset) const; | |
274 void release_double_field_put(int offset, jdouble contents); | |
275 | |
710 | 276 address address_field_acquire(int offset) const; |
277 void release_address_field_put(int offset, address contents); | |
278 | |
0 | 279 // printing functions for VM debugging |
280 void print_on(outputStream* st) const; // First level print | |
281 void print_value_on(outputStream* st) const; // Second level print. | |
282 void print_address_on(outputStream* st) const; // Address printing | |
283 | |
284 // printing on default output stream | |
285 void print(); | |
286 void print_value(); | |
287 void print_address(); | |
288 | |
289 // return the print strings | |
290 char* print_string(); | |
291 char* print_value_string(); | |
292 | |
293 // verification operations | |
294 void verify_on(outputStream* st); | |
295 void verify(); | |
296 void verify_old_oop(oop* p, bool allow_dirty); | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
297 void verify_old_oop(narrowOop* p, bool allow_dirty); |
0 | 298 |
299 // tells whether this oop is partially constructed (gc during class loading) | |
300 bool partially_loaded(); | |
301 void set_partially_loaded(); | |
302 | |
303 // locking operations | |
304 bool is_locked() const; | |
305 bool is_unlocked() const; | |
306 bool has_bias_pattern() const; | |
307 | |
308 // asserts | |
309 bool is_oop(bool ignore_mark_word = false) const; | |
310 bool is_oop_or_null(bool ignore_mark_word = false) const; | |
311 #ifndef PRODUCT | |
312 bool is_unlocked_oop() const; | |
313 #endif | |
314 | |
315 // garbage collection | |
316 bool is_gc_marked() const; | |
317 // Apply "MarkSweep::mark_and_push" to (the address of) every non-NULL | |
318 // reference field in "this". | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
319 void follow_contents(void); |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
320 void follow_header(void); |
0 | 321 |
322 #ifndef SERIALGC | |
323 // Parallel Scavenge | |
324 void push_contents(PSPromotionManager* pm); | |
325 | |
326 // Parallel Old | |
327 void update_contents(ParCompactionManager* cm); | |
328 | |
329 void follow_contents(ParCompactionManager* cm); | |
330 void follow_header(ParCompactionManager* cm); | |
331 #endif // SERIALGC | |
332 | |
333 bool is_perm() const; | |
334 bool is_perm_or_null() const; | |
989
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
710
diff
changeset
|
335 bool is_scavengable() const; |
0 | 336 bool is_shared() const; |
337 bool is_shared_readonly() const; | |
338 bool is_shared_readwrite() const; | |
339 | |
340 // Forward pointer operations for scavenge | |
341 bool is_forwarded() const; | |
342 | |
343 void forward_to(oop p); | |
344 bool cas_forward_to(oop p, markOop compare); | |
345 | |
346 #ifndef SERIALGC | |
347 // Like "forward_to", but inserts the forwarding pointer atomically. | |
348 // Exactly one thread succeeds in inserting the forwarding pointer, and | |
349 // this call returns "NULL" for that thread; any other thread has the | |
350 // value of the forwarding pointer returned and does not modify "this". | |
351 oop forward_to_atomic(oop p); | |
352 #endif // SERIALGC | |
353 | |
354 oop forwardee() const; | |
355 | |
356 // Age of object during scavenge | |
357 int age() const; | |
358 void incr_age(); | |
359 | |
360 // Adjust all pointers in this object to point at it's forwarded location and | |
361 // return the size of this oop. This is used by the MarkSweep collector. | |
362 int adjust_pointers(); | |
363 void adjust_header(); | |
364 | |
365 #ifndef SERIALGC | |
366 // Parallel old | |
367 void update_header(); | |
368 #endif // SERIALGC | |
369 | |
370 // mark-sweep support | |
371 void follow_body(int begin, int end); | |
372 | |
373 // Fast access to barrier set | |
374 static BarrierSet* bs() { return _bs; } | |
375 static void set_bs(BarrierSet* bs) { _bs = bs; } | |
376 | |
377 // iterators, returns size of object | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
378 #define OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
0 | 379 int oop_iterate(OopClosureType* blk); \ |
380 int oop_iterate(OopClosureType* blk, MemRegion mr); // Only in mr. | |
381 | |
382 ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_ITERATE_DECL) | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
383 ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_ITERATE_DECL) |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
384 |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
385 #ifndef SERIALGC |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
386 |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
387 #define OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \ |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
388 int oop_iterate_backwards(OopClosureType* blk); |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
389 |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
390 ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_ITERATE_BACKWARDS_DECL) |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
391 ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_ITERATE_BACKWARDS_DECL) |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
392 #endif |
0 | 393 |
394 void oop_iterate_header(OopClosure* blk); | |
395 void oop_iterate_header(OopClosure* blk, MemRegion mr); | |
396 | |
397 // identity hash; returns the identity hash key (computes it if necessary) | |
398 // NOTE with the introduction of UseBiasedLocking that identity_hash() might reach a | |
399 // safepoint if called on a biased object. Calling code must be aware of that. | |
400 intptr_t identity_hash(); | |
401 intptr_t slow_identity_hash(); | |
402 | |
403 // marks are forwarded to stack when object is locked | |
404 bool has_displaced_mark() const; | |
405 markOop displaced_mark() const; | |
406 void set_displaced_mark(markOop m); | |
407 | |
408 // for code generation | |
409 static int mark_offset_in_bytes() { return offset_of(oopDesc, _mark); } | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
410 static int klass_offset_in_bytes() { return offset_of(oopDesc, _metadata._klass); } |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
411 static int klass_gap_offset_in_bytes(); |
0 | 412 }; |
1972 | 413 |
414 #endif // SHARE_VM_OOPS_OOP_HPP |