mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-09 21:19:38 +00:00
8383912: Deduplicate klass fetching and decoding in oopDesc
Reviewed-by: shade, ayang
This commit is contained in:
parent
05efe2824d
commit
253df3a580
@ -90,6 +90,7 @@ class oopDesc {
|
||||
|
||||
void set_narrow_klass(narrowKlass nk) NOT_CDS_JAVA_HEAP_RETURN;
|
||||
inline narrowKlass narrow_klass() const;
|
||||
inline narrowKlass narrow_klass_acquire() const;
|
||||
inline void set_klass(Klass* k);
|
||||
static inline void release_set_klass(HeapWord* mem, Klass* k);
|
||||
|
||||
|
||||
@ -95,49 +95,19 @@ void oopDesc::init_mark() {
|
||||
}
|
||||
|
||||
Klass* oopDesc::klass() const {
|
||||
switch (ObjLayout::klass_mode()) {
|
||||
case ObjLayout::Compact:
|
||||
return mark().klass();
|
||||
case ObjLayout::Compressed:
|
||||
return CompressedKlassPointers::decode_not_null(_compressed_klass);
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
return CompressedKlassPointers::decode_not_null(narrow_klass());
|
||||
}
|
||||
|
||||
Klass* oopDesc::klass_or_null() const {
|
||||
switch (ObjLayout::klass_mode()) {
|
||||
case ObjLayout::Compact:
|
||||
return mark().klass_or_null();
|
||||
case ObjLayout::Compressed:
|
||||
return CompressedKlassPointers::decode(_compressed_klass);
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
return CompressedKlassPointers::decode(narrow_klass());
|
||||
}
|
||||
|
||||
Klass* oopDesc::klass_or_null_acquire() const {
|
||||
switch (ObjLayout::klass_mode()) {
|
||||
case ObjLayout::Compact:
|
||||
return mark_acquire().klass_or_null();
|
||||
case ObjLayout::Compressed: {
|
||||
narrowKlass narrow_klass = AtomicAccess::load_acquire(&_compressed_klass);
|
||||
return CompressedKlassPointers::decode(narrow_klass);
|
||||
}
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
return CompressedKlassPointers::decode(narrow_klass_acquire());
|
||||
}
|
||||
|
||||
Klass* oopDesc::klass_without_asserts() const {
|
||||
switch (ObjLayout::klass_mode()) {
|
||||
case ObjLayout::Compact:
|
||||
return mark().klass_without_asserts();
|
||||
case ObjLayout::Compressed:
|
||||
return CompressedKlassPointers::decode_without_asserts(_compressed_klass);
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
return CompressedKlassPointers::decode_without_asserts(narrow_klass());
|
||||
}
|
||||
|
||||
narrowKlass oopDesc::narrow_klass() const {
|
||||
@ -151,6 +121,17 @@ narrowKlass oopDesc::narrow_klass() const {
|
||||
}
|
||||
}
|
||||
|
||||
narrowKlass oopDesc::narrow_klass_acquire() const {
|
||||
switch (ObjLayout::klass_mode()) {
|
||||
case ObjLayout::Compact:
|
||||
return mark_acquire().narrow_klass();
|
||||
case ObjLayout::Compressed:
|
||||
return AtomicAccess::load_acquire(&_compressed_klass);
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
}
|
||||
|
||||
void oopDesc::set_klass(Klass* k) {
|
||||
assert(Universe::is_bootstrapping() || (k != nullptr && k->is_klass()), "incorrect Klass");
|
||||
assert(!UseCompactObjectHeaders, "don't set Klass* with compact headers");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user