< prev index next >

src/hotspot/share/oops/klass.cpp

Access_GetLoadedClasses
 #include "memory/metadataFactory.hpp"
 #include "memory/metaspaceClosure.hpp"
 #include "memory/metaspaceShared.hpp"
 #include "memory/oopFactory.hpp"
 #include "memory/resourceArea.hpp"
+#include "oops/access.inline.hpp"
 #include "oops/instanceKlass.hpp"
 #include "oops/klass.inline.hpp"
 #include "oops/oop.inline.hpp"
 #include "runtime/atomic.hpp"
 #include "runtime/orderAccess.inline.hpp"

@@ -52,10 +53,22 oop Klass::java_mirror() const { return _java_mirror.resolve(); } +oop Klass::java_mirror_phantom() { + // Loading the klass_holder as a phantom oop ref keeps the class alive. + // After the holder has been kept alive, it is safe to return the mirror. + (void)klass_holder_phantom(); + return java_mirror(); +} + +oop Klass::klass_holder_phantom() { + oop* addr = &class_loader_data()->_class_loader; + return RootAccess<IN_CONCURRENT_ROOT | ON_PHANTOM_OOP_REF>::oop_load(addr); +} + bool Klass::is_cloneable() const { return _access_flags.is_cloneable_fast() || is_subtype_of(SystemDictionary::Cloneable_klass()); }
< prev index next >