< 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"
***************
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 >