diff --git a/src/hotspot/share/oops/oop.hpp b/src/hotspot/share/oops/oop.hpp index d6cc71a60d8..daa192d5124 100644 --- a/src/hotspot/share/oops/oop.hpp +++ b/src/hotspot/share/oops/oop.hpp @@ -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); diff --git a/src/hotspot/share/oops/oop.inline.hpp b/src/hotspot/share/oops/oop.inline.hpp index 84327aaee39..066ba7a8e20 100644 --- a/src/hotspot/share/oops/oop.inline.hpp +++ b/src/hotspot/share/oops/oop.inline.hpp @@ -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");