< prev index next >

src/hotspot/share/oops/oop.inline.hpp

Print this page

124     case ObjLayout::Compressed: {
125       narrowKlass narrow_klass = Atomic::load_acquire(&_metadata._compressed_klass);
126       return CompressedKlassPointers::decode(narrow_klass);
127     }
128     default:
129       return Atomic::load_acquire(&_metadata._klass);
130   }
131 }
132 
133 Klass* oopDesc::klass_without_asserts() const {
134   switch (ObjLayout::klass_mode()) {
135     case ObjLayout::Compact:
136       return mark().klass_without_asserts();
137     case ObjLayout::Compressed:
138       return CompressedKlassPointers::decode_without_asserts(_metadata._compressed_klass);
139     default:
140       return _metadata._klass;
141   }
142 }
143 











144 void oopDesc::set_klass(Klass* k) {
145   assert(Universe::is_bootstrapping() || (k != nullptr && k->is_klass()), "incorrect Klass");
146   assert(!UseCompactObjectHeaders, "don't set Klass* with compact headers");
147   if (UseCompressedClassPointers) {
148     _metadata._compressed_klass = CompressedKlassPointers::encode_not_null(k);
149   } else {
150     _metadata._klass = k;
151   }
152 }
153 
154 void oopDesc::release_set_klass(HeapWord* mem, Klass* k) {
155   assert(Universe::is_bootstrapping() || (k != nullptr && k->is_klass()), "incorrect Klass");
156   assert(!UseCompactObjectHeaders, "don't set Klass* with compact headers");
157   char* raw_mem = ((char*)mem + klass_offset_in_bytes());
158   if (UseCompressedClassPointers) {
159     Atomic::release_store((narrowKlass*)raw_mem,
160                           CompressedKlassPointers::encode_not_null(k));
161   } else {
162     Atomic::release_store((Klass**)raw_mem, k);
163   }

124     case ObjLayout::Compressed: {
125       narrowKlass narrow_klass = Atomic::load_acquire(&_metadata._compressed_klass);
126       return CompressedKlassPointers::decode(narrow_klass);
127     }
128     default:
129       return Atomic::load_acquire(&_metadata._klass);
130   }
131 }
132 
133 Klass* oopDesc::klass_without_asserts() const {
134   switch (ObjLayout::klass_mode()) {
135     case ObjLayout::Compact:
136       return mark().klass_without_asserts();
137     case ObjLayout::Compressed:
138       return CompressedKlassPointers::decode_without_asserts(_metadata._compressed_klass);
139     default:
140       return _metadata._klass;
141   }
142 }
143 
144 narrowKlass oopDesc::narrow_klass() const {
145   switch (ObjLayout::klass_mode()) {
146     case ObjLayout::Compact:
147       return mark().narrow_klass();
148     case ObjLayout::Compressed:
149       return _metadata._compressed_klass;
150     default:
151       ShouldNotReachHere();
152   }
153 }
154 
155 void oopDesc::set_klass(Klass* k) {
156   assert(Universe::is_bootstrapping() || (k != nullptr && k->is_klass()), "incorrect Klass");
157   assert(!UseCompactObjectHeaders, "don't set Klass* with compact headers");
158   if (UseCompressedClassPointers) {
159     _metadata._compressed_klass = CompressedKlassPointers::encode_not_null(k);
160   } else {
161     _metadata._klass = k;
162   }
163 }
164 
165 void oopDesc::release_set_klass(HeapWord* mem, Klass* k) {
166   assert(Universe::is_bootstrapping() || (k != nullptr && k->is_klass()), "incorrect Klass");
167   assert(!UseCompactObjectHeaders, "don't set Klass* with compact headers");
168   char* raw_mem = ((char*)mem + klass_offset_in_bytes());
169   if (UseCompressedClassPointers) {
170     Atomic::release_store((narrowKlass*)raw_mem,
171                           CompressedKlassPointers::encode_not_null(k));
172   } else {
173     Atomic::release_store((Klass**)raw_mem, k);
174   }
< prev index next >