8185694: Replace SystemDictionaryShared::_java_platform_loader with SystemDictionary::is_platform_class_loader()
Added the creation of _java_platform_loader Reviewed-by: iklam, coleenp, mchung, dholmes, jiangli
This commit is contained in:
parent
4c1297b778
commit
449114a4f6
src/hotspot/share
@ -104,6 +104,7 @@ InstanceKlass* SystemDictionary::_well_known_klasses[SystemDictionary::WKID
|
||||
InstanceKlass* SystemDictionary::_box_klasses[T_VOID+1] = { NULL /*, NULL...*/ };
|
||||
|
||||
oop SystemDictionary::_java_system_loader = NULL;
|
||||
oop SystemDictionary::_java_platform_loader = NULL;
|
||||
|
||||
bool SystemDictionary::_has_loadClassInternal = false;
|
||||
bool SystemDictionary::_has_checkPackageAccess = false;
|
||||
@ -117,27 +118,38 @@ const int defaultProtectionDomainCacheSize = 1009;
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Java-level SystemLoader
|
||||
// Java-level SystemLoader and PlatformLoader
|
||||
|
||||
oop SystemDictionary::java_system_loader() {
|
||||
return _java_system_loader;
|
||||
}
|
||||
|
||||
void SystemDictionary::compute_java_system_loader(TRAPS) {
|
||||
Klass* system_klass = WK_KLASS(ClassLoader_klass);
|
||||
oop SystemDictionary::java_platform_loader() {
|
||||
return _java_platform_loader;
|
||||
}
|
||||
|
||||
void SystemDictionary::compute_java_loaders(TRAPS) {
|
||||
JavaValue result(T_OBJECT);
|
||||
InstanceKlass* class_loader_klass = SystemDictionary::ClassLoader_klass();
|
||||
JavaCalls::call_static(&result,
|
||||
WK_KLASS(ClassLoader_klass),
|
||||
class_loader_klass,
|
||||
vmSymbols::getSystemClassLoader_name(),
|
||||
vmSymbols::void_classloader_signature(),
|
||||
CHECK);
|
||||
|
||||
_java_system_loader = (oop)result.get_jobject();
|
||||
|
||||
JavaCalls::call_static(&result,
|
||||
class_loader_klass,
|
||||
vmSymbols::getPlatformClassLoader_name(),
|
||||
vmSymbols::void_classloader_signature(),
|
||||
CHECK);
|
||||
|
||||
_java_platform_loader = (oop)result.get_jobject();
|
||||
|
||||
CDS_ONLY(SystemDictionaryShared::initialize(CHECK);)
|
||||
}
|
||||
|
||||
|
||||
ClassLoaderData* SystemDictionary::register_loader(Handle class_loader, TRAPS) {
|
||||
if (class_loader() == NULL) return ClassLoaderData::the_null_class_loader_data();
|
||||
return ClassLoaderDataGraph::find_or_create(class_loader, THREAD);
|
||||
@ -169,7 +181,7 @@ bool SystemDictionary::is_system_class_loader(oop class_loader) {
|
||||
return false;
|
||||
}
|
||||
return (class_loader->klass() == SystemDictionary::jdk_internal_loader_ClassLoaders_AppClassLoader_klass() ||
|
||||
class_loader == _java_system_loader);
|
||||
class_loader == _java_system_loader);
|
||||
}
|
||||
|
||||
// Returns true if the passed class loader is the platform class loader.
|
||||
@ -1940,6 +1952,7 @@ bool SystemDictionary::do_unloading(BoolObjectClosure* is_alive,
|
||||
|
||||
void SystemDictionary::roots_oops_do(OopClosure* strong, OopClosure* weak) {
|
||||
strong->do_oop(&_java_system_loader);
|
||||
strong->do_oop(&_java_platform_loader);
|
||||
strong->do_oop(&_system_loader_lock_obj);
|
||||
CDS_ONLY(SystemDictionaryShared::roots_oops_do(strong);)
|
||||
|
||||
@ -1964,6 +1977,7 @@ void SystemDictionary::roots_oops_do(OopClosure* strong, OopClosure* weak) {
|
||||
|
||||
void SystemDictionary::oops_do(OopClosure* f) {
|
||||
f->do_oop(&_java_system_loader);
|
||||
f->do_oop(&_java_platform_loader);
|
||||
f->do_oop(&_system_loader_lock_obj);
|
||||
CDS_ONLY(SystemDictionaryShared::oops_do(f);)
|
||||
|
||||
|
@ -484,11 +484,14 @@ public:
|
||||
static bool Object_klass_loaded() { return WK_KLASS(Object_klass) != NULL; }
|
||||
static bool ClassLoader_klass_loaded() { return WK_KLASS(ClassLoader_klass) != NULL; }
|
||||
|
||||
// Returns default system loader
|
||||
// Returns java system loader
|
||||
static oop java_system_loader();
|
||||
|
||||
// Compute the default system loader
|
||||
static void compute_java_system_loader(TRAPS);
|
||||
// Returns java platform loader
|
||||
static oop java_platform_loader();
|
||||
|
||||
// Compute the java system and platform loaders
|
||||
static void compute_java_loaders(TRAPS);
|
||||
|
||||
// Register a new class loader
|
||||
static ClassLoaderData* register_loader(Handle class_loader, TRAPS);
|
||||
@ -700,6 +703,7 @@ protected:
|
||||
static InstanceKlass* _box_klasses[T_VOID+1];
|
||||
|
||||
static oop _java_system_loader;
|
||||
static oop _java_platform_loader;
|
||||
|
||||
static bool _has_loadClassInternal;
|
||||
static bool _has_checkPackageAccess;
|
||||
|
@ -371,6 +371,7 @@
|
||||
template(deadChild_name, "deadChild") \
|
||||
template(getFromClass_name, "getFromClass") \
|
||||
template(dispatch_name, "dispatch") \
|
||||
template(getPlatformClassLoader_name, "getPlatformClassLoader") \
|
||||
template(getSystemClassLoader_name, "getSystemClassLoader") \
|
||||
template(fillInStackTrace_name, "fillInStackTrace") \
|
||||
template(getCause_name, "getCause") \
|
||||
|
@ -3751,8 +3751,8 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
|
||||
// Final system initialization including security manager and system class loader
|
||||
call_initPhase3(CHECK_JNI_ERR);
|
||||
|
||||
// cache the system class loader
|
||||
SystemDictionary::compute_java_system_loader(CHECK_(JNI_ERR));
|
||||
// cache the system and platform class loaders
|
||||
SystemDictionary::compute_java_loaders(CHECK_JNI_ERR);
|
||||
|
||||
#if INCLUDE_JVMCI
|
||||
if (EnableJVMCI) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user