3939#include " oops/oopsHierarchy.hpp"
4040#include " runtime/atomicAccess.hpp"
4141#include " runtime/globals.hpp"
42- #include " runtime/orderAccess.hpp"
4342#include " utilities/align.hpp"
4443#include " utilities/debug.hpp"
4544#include " utilities/globalDefinitions.hpp"
@@ -104,9 +103,7 @@ Klass* oopDesc::klass_or_null() const {
104103}
105104
106105Klass* oopDesc::klass_or_null_acquire () const {
107- narrowKlass nk = narrow_klass ();
108- OrderAccess::acquire ();
109- return CompressedKlassPointers::decode (nk);
106+ return CompressedKlassPointers::decode (narrow_klass_acquire ());
110107}
111108
112109Klass* oopDesc::klass_without_asserts () const {
@@ -124,6 +121,17 @@ narrowKlass oopDesc::narrow_klass() const {
124121 }
125122}
126123
124+ narrowKlass oopDesc::narrow_klass_acquire () const {
125+ switch (ObjLayout::klass_mode ()) {
126+ case ObjLayout::Compact:
127+ return mark_acquire ().narrow_klass ();
128+ case ObjLayout::Compressed:
129+ return AtomicAccess::load_acquire (&_compressed_klass);
130+ default :
131+ ShouldNotReachHere ();
132+ }
133+ }
134+
127135void oopDesc::set_klass (Klass* k) {
128136 assert (Universe::is_bootstrapping () || (k != nullptr && k->is_klass ()), " incorrect Klass" );
129137 assert (!UseCompactObjectHeaders, " don't set Klass* with compact headers" );
0 commit comments