src/hotspot/share/classfile/systemDictionary.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
open Cdiff src/hotspot/share/classfile/systemDictionary.cpp
src/hotspot/share/classfile/systemDictionary.cpp
Print this page
*** 102,111 ****
--- 102,112 ----
= { NULL /*, NULL...*/ };
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;
// lazily initialized klass variables
*** 115,145 ****
const int defaultProtectionDomainCacheSize = 1009;
// ----------------------------------------------------------------------------
! // Java-level SystemLoader
oop SystemDictionary::java_system_loader() {
return _java_system_loader;
}
! void SystemDictionary::compute_java_system_loader(TRAPS) {
! Klass* system_klass = WK_KLASS(ClassLoader_klass);
JavaValue result(T_OBJECT);
JavaCalls::call_static(&result,
! WK_KLASS(ClassLoader_klass),
vmSymbols::getSystemClassLoader_name(),
vmSymbols::void_classloader_signature(),
CHECK);
_java_system_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);
}
--- 116,157 ----
const int defaultProtectionDomainCacheSize = 1009;
// ----------------------------------------------------------------------------
! // Java-level SystemLoader and PlatformLoader
oop SystemDictionary::java_system_loader() {
return _java_system_loader;
}
! 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,
! 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);
}
*** 1938,1947 ****
--- 1950,1960 ----
return unloading_occurred;
}
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);)
// Do strong roots marking if the closures are the same.
if (strong == weak || !ClassUnloading) {
*** 1962,1971 ****
--- 1975,1985 ----
}
}
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);)
// Only the protection domain oops contain references into the heap. Iterate
// over all of them.
src/hotspot/share/classfile/systemDictionary.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File