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