8383912: Deduplicate klass fetching and decoding in oopDesc

Reviewed-by: shade, ayang
This commit is contained in:
Stefan Karlsson 2026-05-07 11:26:51 +00:00
parent 05efe2824d
commit 253df3a580
2 changed files with 16 additions and 34 deletions

View File

@ -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);

View File

@ -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");