Mercurial > hg > graal-compiler
annotate src/share/vm/oops/oop.hpp @ 10185:d50cc62e94ff
8012715: G1: GraphKit accesses PtrQueue::_index as int but is size_t
Summary: In graphKit INT operations were generated to access PtrQueue::_index which has type size_t. This is 64 bit on 64-bit machines. No problems occur on little endian machines as long as the index fits into 32 bit, but on big endian machines the upper part is read, which is zero. This leads to unnecessary branches to the slow path in the runtime.
Reviewed-by: twisti, johnc
Contributed-by: Martin Doerr <martin.doerr@sap.com>
author | johnc |
---|---|
date | Wed, 24 Apr 2013 14:48:43 -0700 |
parents | db9981fd3124 |
children | 740e263c80c6 |
rev | line source |
---|---|
0 | 1 /* |
6008 | 2 * Copyright (c) 1997, 2012, 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" | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
31 #include "oops/metadata.hpp" |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6818
diff
changeset
|
32 #include "utilities/macros.hpp" |
1972 | 33 #include "utilities/top.hpp" |
34 | |
0 | 35 // oopDesc is the top baseclass for objects classes. The {name}Desc classes describe |
36 // the format of Java objects so the fields can be accessed from C++. | |
37 // oopDesc is abstract. | |
38 // (see oopHierarchy for complete oop class hierarchy) | |
39 // | |
40 // no virtual functions allowed | |
41 | |
42 // store into oop with store check | |
1972 | 43 template <class T> void oop_store(T* p, oop v); |
44 template <class T> void oop_store(volatile T* p, oop v); | |
0 | 45 |
46 extern bool always_do_update_barrier; | |
47 | |
48 // Forward declarations. | |
49 class OopClosure; | |
50 class ScanClosure; | |
51 class FastScanClosure; | |
52 class FilteringClosure; | |
53 class BarrierSet; | |
54 class CMSIsAliveClosure; | |
55 | |
56 class PSPromotionManager; | |
57 class ParCompactionManager; | |
58 | |
59 class oopDesc { | |
60 friend class VMStructs; | |
61 private: | |
62 volatile markOop _mark; | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
63 union _metadata { |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
64 Klass* _klass; |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
65 narrowOop _compressed_klass; |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
66 } _metadata; |
0 | 67 |
68 // Fast access to barrier set. Must be initialized. | |
69 static BarrierSet* _bs; | |
70 | |
71 public: | |
72 markOop mark() const { return _mark; } | |
73 markOop* mark_addr() const { return (markOop*) &_mark; } | |
74 | |
75 void set_mark(volatile markOop m) { _mark = m; } | |
76 | |
77 void release_set_mark(markOop m); | |
78 markOop cas_set_mark(markOop new_mark, markOop old_mark); | |
79 | |
80 // Used only to re-initialize the mark word (e.g., of promoted | |
81 // objects during a GC) -- requires a valid klass pointer | |
82 void init_mark(); | |
83 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
84 Klass* klass() const; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
85 Klass* klass_or_null() const volatile; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
86 Klass** klass_addr(); |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
87 narrowOop* compressed_klass_addr(); |
0 | 88 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
89 void set_klass(Klass* k); |
167
feeb96a45707
6696264: assert("narrow oop can never be zero") for GCBasher & ParNewGC
coleenp
parents:
135
diff
changeset
|
90 |
feeb96a45707
6696264: assert("narrow oop can never be zero") for GCBasher & ParNewGC
coleenp
parents:
135
diff
changeset
|
91 // For klass field compression |
feeb96a45707
6696264: assert("narrow oop can never be zero") for GCBasher & ParNewGC
coleenp
parents:
135
diff
changeset
|
92 int klass_gap() const; |
feeb96a45707
6696264: assert("narrow oop can never be zero") for GCBasher & ParNewGC
coleenp
parents:
135
diff
changeset
|
93 void set_klass_gap(int z); |
0 | 94 // For when the klass pointer is being used as a linked list "next" field. |
95 void set_klass_to_list_ptr(oop k); | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
96 oop list_ptr_from_klass(); |
0 | 97 |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
98 // 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
|
99 static int header_size() { return sizeof(oopDesc)/HeapWordSize; } |
0 | 100 |
101 // Returns whether this is an instance of k or an instance of a subclass of k | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
102 bool is_a(Klass* k) const; |
0 | 103 |
104 // Returns the actual oop size of the object | |
105 int size(); | |
106 | |
107 // Sometimes (for complicated concurrency-related reasons), it is useful | |
108 // to be able to figure out the size of an object knowing its klass. | |
109 int size_given_klass(Klass* klass); | |
110 | |
111 // type test operations (inlined in oop.inline.h) | |
112 bool is_instance() const; | |
2376
c7f3d0b4570f
7017732: move static fields into Class to prepare for perm gen removal
never
parents:
2227
diff
changeset
|
113 bool is_instanceMirror() const; |
0 | 114 bool is_instanceRef() const; |
115 bool is_array() const; | |
116 bool is_objArray() const; | |
117 bool is_typeArray() const; | |
118 | |
119 private: | |
120 // field addresses in oop | |
121 void* field_base(int offset) const; | |
122 | |
123 jbyte* byte_field_addr(int offset) const; | |
124 jchar* char_field_addr(int offset) const; | |
125 jboolean* bool_field_addr(int offset) const; | |
126 jint* int_field_addr(int offset) const; | |
127 jshort* short_field_addr(int offset) const; | |
128 jlong* long_field_addr(int offset) const; | |
129 jfloat* float_field_addr(int offset) const; | |
130 jdouble* double_field_addr(int offset) const; | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
131 Metadata** metadata_field_addr(int offset) const; |
0 | 132 |
133 public: | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
134 // 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
|
135 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
|
136 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
137 // Needed for javaClasses |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
138 address* address_field_addr(int offset) const; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
139 |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
140 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
|
141 static bool is_null(narrowOop obj); |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
142 static bool is_null(Klass* obj); |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
143 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
144 // 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
|
145 // 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
|
146 // 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
|
147 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
|
148 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
|
149 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
|
150 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
|
151 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
152 // 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
|
153 // 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
|
154 // null checking branches. |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
155 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
|
156 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
|
157 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
158 // 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
|
159 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
|
160 static oop load_heap_oop(oop* p); |
0 | 161 |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
162 // 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
|
163 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
|
164 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
|
165 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
|
166 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
|
167 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
168 // 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
|
169 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
|
170 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
|
171 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
172 // 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
|
173 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
|
174 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
|
175 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
|
176 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
|
177 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
178 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
|
179 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
|
180 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
181 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
|
182 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
|
183 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
|
184 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
|
185 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
186 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
|
187 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
|
188 volatile HeapWord *dest, |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
189 oop compare_value, |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
190 bool prebarrier = false); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
191 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
192 // klass encoding for klass pointer in objects. |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
193 static narrowOop encode_klass_not_null(Klass* v); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
194 static narrowOop encode_klass(Klass* v); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
195 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
196 static Klass* decode_klass_not_null(narrowOop v); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
197 static Klass* decode_klass(narrowOop v); |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
198 |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
199 // Access to fields in a instanceOop through these methods. |
0 | 200 oop obj_field(int offset) const; |
3932
b0efc7ee3b31
7085860: JSR 292: implement CallSite.setTargetNormal and setTargetVolatile as native methods
twisti
parents:
2376
diff
changeset
|
201 volatile oop obj_field_volatile(int offset) const; |
0 | 202 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
|
203 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
|
204 void obj_field_put_volatile(int offset, oop value); |
0 | 205 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
206 Metadata* metadata_field(int offset) const; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
207 void metadata_field_put(int offset, Metadata* value); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
208 |
0 | 209 jbyte byte_field(int offset) const; |
210 void byte_field_put(int offset, jbyte contents); | |
211 | |
212 jchar char_field(int offset) const; | |
213 void char_field_put(int offset, jchar contents); | |
214 | |
215 jboolean bool_field(int offset) const; | |
216 void bool_field_put(int offset, jboolean contents); | |
217 | |
218 jint int_field(int offset) const; | |
219 void int_field_put(int offset, jint contents); | |
220 | |
221 jshort short_field(int offset) const; | |
222 void short_field_put(int offset, jshort contents); | |
223 | |
224 jlong long_field(int offset) const; | |
225 void long_field_put(int offset, jlong contents); | |
226 | |
227 jfloat float_field(int offset) const; | |
228 void float_field_put(int offset, jfloat contents); | |
229 | |
230 jdouble double_field(int offset) const; | |
231 void double_field_put(int offset, jdouble contents); | |
232 | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
233 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
|
234 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
|
235 |
0 | 236 oop obj_field_acquire(int offset) const; |
237 void release_obj_field_put(int offset, oop value); | |
238 | |
239 jbyte byte_field_acquire(int offset) const; | |
240 void release_byte_field_put(int offset, jbyte contents); | |
241 | |
242 jchar char_field_acquire(int offset) const; | |
243 void release_char_field_put(int offset, jchar contents); | |
244 | |
245 jboolean bool_field_acquire(int offset) const; | |
246 void release_bool_field_put(int offset, jboolean contents); | |
247 | |
248 jint int_field_acquire(int offset) const; | |
249 void release_int_field_put(int offset, jint contents); | |
250 | |
251 jshort short_field_acquire(int offset) const; | |
252 void release_short_field_put(int offset, jshort contents); | |
253 | |
254 jlong long_field_acquire(int offset) const; | |
255 void release_long_field_put(int offset, jlong contents); | |
256 | |
257 jfloat float_field_acquire(int offset) const; | |
258 void release_float_field_put(int offset, jfloat contents); | |
259 | |
260 jdouble double_field_acquire(int offset) const; | |
261 void release_double_field_put(int offset, jdouble contents); | |
262 | |
710 | 263 address address_field_acquire(int offset) const; |
264 void release_address_field_put(int offset, address contents); | |
265 | |
0 | 266 // printing functions for VM debugging |
267 void print_on(outputStream* st) const; // First level print | |
268 void print_value_on(outputStream* st) const; // Second level print. | |
269 void print_address_on(outputStream* st) const; // Address printing | |
270 | |
271 // printing on default output stream | |
272 void print(); | |
273 void print_value(); | |
274 void print_address(); | |
275 | |
276 // return the print strings | |
277 char* print_string(); | |
278 char* print_value_string(); | |
279 | |
280 // verification operations | |
281 void verify_on(outputStream* st); | |
282 void verify(); | |
283 | |
284 // locking operations | |
285 bool is_locked() const; | |
286 bool is_unlocked() const; | |
287 bool has_bias_pattern() const; | |
288 | |
289 // asserts | |
290 bool is_oop(bool ignore_mark_word = false) const; | |
291 bool is_oop_or_null(bool ignore_mark_word = false) const; | |
292 #ifndef PRODUCT | |
293 bool is_unlocked_oop() const; | |
294 #endif | |
295 | |
296 // garbage collection | |
297 bool is_gc_marked() const; | |
298 // Apply "MarkSweep::mark_and_push" to (the address of) every non-NULL | |
299 // reference field in "this". | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
300 void follow_contents(void); |
0 | 301 |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6818
diff
changeset
|
302 #if INCLUDE_ALL_GCS |
0 | 303 // Parallel Scavenge |
304 void push_contents(PSPromotionManager* pm); | |
305 | |
306 // Parallel Old | |
307 void update_contents(ParCompactionManager* cm); | |
308 | |
309 void follow_contents(ParCompactionManager* cm); | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6818
diff
changeset
|
310 #endif // INCLUDE_ALL_GCS |
0 | 311 |
989
148e5441d916
6863023: need non-perm oops in code cache for JSR 292
jrose
parents:
710
diff
changeset
|
312 bool is_scavengable() const; |
0 | 313 |
314 // Forward pointer operations for scavenge | |
315 bool is_forwarded() const; | |
316 | |
317 void forward_to(oop p); | |
318 bool cas_forward_to(oop p, markOop compare); | |
319 | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6818
diff
changeset
|
320 #if INCLUDE_ALL_GCS |
0 | 321 // Like "forward_to", but inserts the forwarding pointer atomically. |
322 // Exactly one thread succeeds in inserting the forwarding pointer, and | |
323 // this call returns "NULL" for that thread; any other thread has the | |
324 // value of the forwarding pointer returned and does not modify "this". | |
325 oop forward_to_atomic(oop p); | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6818
diff
changeset
|
326 #endif // INCLUDE_ALL_GCS |
0 | 327 |
328 oop forwardee() const; | |
329 | |
330 // Age of object during scavenge | |
6818 | 331 uint age() const; |
0 | 332 void incr_age(); |
333 | |
334 // Adjust all pointers in this object to point at it's forwarded location and | |
335 // return the size of this oop. This is used by the MarkSweep collector. | |
336 int adjust_pointers(); | |
337 | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6818
diff
changeset
|
338 #if INCLUDE_ALL_GCS |
0 | 339 // Parallel old |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
340 void update_header(ParCompactionManager* cm); |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6818
diff
changeset
|
341 #endif // INCLUDE_ALL_GCS |
0 | 342 |
343 // mark-sweep support | |
344 void follow_body(int begin, int end); | |
345 | |
346 // Fast access to barrier set | |
347 static BarrierSet* bs() { return _bs; } | |
348 static void set_bs(BarrierSet* bs) { _bs = bs; } | |
349 | |
350 // iterators, returns size of object | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
351 #define OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
0 | 352 int oop_iterate(OopClosureType* blk); \ |
353 int oop_iterate(OopClosureType* blk, MemRegion mr); // Only in mr. | |
354 | |
355 ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_ITERATE_DECL) | |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
356 ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_ITERATE_DECL) |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
357 |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6818
diff
changeset
|
358 #if INCLUDE_ALL_GCS |
342
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
359 |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
360 #define OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \ |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
361 int oop_iterate_backwards(OopClosureType* blk); |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
362 |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
363 ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_ITERATE_BACKWARDS_DECL) |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
364 ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_ITERATE_BACKWARDS_DECL) |
37f87013dfd8
6711316: Open source the Garbage-First garbage collector
ysr
parents:
135
diff
changeset
|
365 #endif |
0 | 366 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
367 int oop_iterate_no_header(OopClosure* bk); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
368 int oop_iterate_no_header(OopClosure* bk, MemRegion mr); |
0 | 369 |
370 // identity hash; returns the identity hash key (computes it if necessary) | |
371 // NOTE with the introduction of UseBiasedLocking that identity_hash() might reach a | |
372 // safepoint if called on a biased object. Calling code must be aware of that. | |
373 intptr_t identity_hash(); | |
374 intptr_t slow_identity_hash(); | |
375 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
376 // Alternate hashing code if string table is rehashed |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
377 unsigned int new_hash(jint seed); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6008
diff
changeset
|
378 |
0 | 379 // marks are forwarded to stack when object is locked |
380 bool has_displaced_mark() const; | |
381 markOop displaced_mark() const; | |
382 void set_displaced_mark(markOop m); | |
383 | |
384 // for code generation | |
385 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
|
386 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
|
387 static int klass_gap_offset_in_bytes(); |
0 | 388 }; |
1972 | 389 |
390 #endif // SHARE_VM_OOPS_OOP_HPP |