132 } 133 134 void SystemDictionary::compute_java_loaders(TRAPS) { 135 JavaValue result(T_OBJECT); 136 InstanceKlass* class_loader_klass = SystemDictionary::ClassLoader_klass(); 137 JavaCalls::call_static(&result, 138 class_loader_klass, 139 vmSymbols::getSystemClassLoader_name(), 140 vmSymbols::void_classloader_signature(), 141 CHECK); 142 143 _java_system_loader = (oop)result.get_jobject(); 144 145 JavaCalls::call_static(&result, 146 class_loader_klass, 147 vmSymbols::getPlatformClassLoader_name(), 148 vmSymbols::void_classloader_signature(), 149 CHECK); 150 151 _java_platform_loader = (oop)result.get_jobject(); 152 153 CDS_ONLY(SystemDictionaryShared::initialize(CHECK);) 154 } 155 156 ClassLoaderData* SystemDictionary::register_loader(Handle class_loader) { 157 if (class_loader() == NULL) return ClassLoaderData::the_null_class_loader_data(); 158 return ClassLoaderDataGraph::find_or_create(class_loader); 159 } 160 161 // ---------------------------------------------------------------------------- 162 // Parallel class loading check 163 164 bool SystemDictionary::is_parallelCapable(Handle class_loader) { 165 if (class_loader.is_null()) return true; 166 if (AlwaysLockClassLoader) return false; 167 return java_lang_ClassLoader::parallelCapable(class_loader()); 168 } 169 // ---------------------------------------------------------------------------- 170 // ParallelDefineClass flag does not apply to bootclass loader 171 bool SystemDictionary::is_parallelDefine(Handle class_loader) { 172 if (class_loader.is_null()) return false; 173 if (AllowParallelDefineClass && java_lang_ClassLoader::parallelCapable(class_loader())) { 1953 _abstract_ownable_synchronizer_klass = InstanceKlass::cast(k); 1954 } 1955 } 1956 1957 // ---------------------------------------------------------------------------- 1958 // Initialization 1959 1960 void SystemDictionary::initialize(TRAPS) { 1961 // Allocate arrays 1962 _placeholders = new PlaceholderTable(_placeholder_table_size); 1963 _number_of_modifications = 0; 1964 _loader_constraints = new LoaderConstraintTable(_loader_constraint_size); 1965 _resolution_errors = new ResolutionErrorTable(_resolution_error_size); 1966 _invoke_method_table = new SymbolPropertyTable(_invoke_method_size); 1967 _pd_cache_table = new ProtectionDomainCacheTable(defaultProtectionDomainCacheSize); 1968 1969 // Allocate private object used as system class loader lock 1970 _system_loader_lock_obj = oopFactory::new_intArray(0, CHECK); 1971 // Initialize basic classes 1972 initialize_preloaded_classes(CHECK); 1973 } 1974 1975 // Compact table of directions on the initialization of klasses: 1976 static const short wk_init_info[] = { 1977 #define WK_KLASS_INIT_INFO(name, symbol, option) \ 1978 ( ((int)vmSymbols::VM_SYMBOL_ENUM_NAME(symbol) \ 1979 << SystemDictionary::CEIL_LG_OPTION_LIMIT) \ 1980 | (int)SystemDictionary::option ), 1981 WK_KLASSES_DO(WK_KLASS_INIT_INFO) 1982 #undef WK_KLASS_INIT_INFO 1983 0 1984 }; 1985 1986 bool SystemDictionary::initialize_wk_klass(WKID id, int init_opt, TRAPS) { 1987 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); 1988 int info = wk_init_info[id - FIRST_WKID]; 1989 int sid = (info >> CEIL_LG_OPTION_LIMIT); 1990 Symbol* symbol = vmSymbols::symbol_at((vmSymbols::SID)sid); 1991 InstanceKlass** klassp = &_well_known_klasses[id]; 1992 | 132 } 133 134 void SystemDictionary::compute_java_loaders(TRAPS) { 135 JavaValue result(T_OBJECT); 136 InstanceKlass* class_loader_klass = SystemDictionary::ClassLoader_klass(); 137 JavaCalls::call_static(&result, 138 class_loader_klass, 139 vmSymbols::getSystemClassLoader_name(), 140 vmSymbols::void_classloader_signature(), 141 CHECK); 142 143 _java_system_loader = (oop)result.get_jobject(); 144 145 JavaCalls::call_static(&result, 146 class_loader_klass, 147 vmSymbols::getPlatformClassLoader_name(), 148 vmSymbols::void_classloader_signature(), 149 CHECK); 150 151 _java_platform_loader = (oop)result.get_jobject(); 152 } 153 154 ClassLoaderData* SystemDictionary::register_loader(Handle class_loader) { 155 if (class_loader() == NULL) return ClassLoaderData::the_null_class_loader_data(); 156 return ClassLoaderDataGraph::find_or_create(class_loader); 157 } 158 159 // ---------------------------------------------------------------------------- 160 // Parallel class loading check 161 162 bool SystemDictionary::is_parallelCapable(Handle class_loader) { 163 if (class_loader.is_null()) return true; 164 if (AlwaysLockClassLoader) return false; 165 return java_lang_ClassLoader::parallelCapable(class_loader()); 166 } 167 // ---------------------------------------------------------------------------- 168 // ParallelDefineClass flag does not apply to bootclass loader 169 bool SystemDictionary::is_parallelDefine(Handle class_loader) { 170 if (class_loader.is_null()) return false; 171 if (AllowParallelDefineClass && java_lang_ClassLoader::parallelCapable(class_loader())) { 1951 _abstract_ownable_synchronizer_klass = InstanceKlass::cast(k); 1952 } 1953 } 1954 1955 // ---------------------------------------------------------------------------- 1956 // Initialization 1957 1958 void SystemDictionary::initialize(TRAPS) { 1959 // Allocate arrays 1960 _placeholders = new PlaceholderTable(_placeholder_table_size); 1961 _number_of_modifications = 0; 1962 _loader_constraints = new LoaderConstraintTable(_loader_constraint_size); 1963 _resolution_errors = new ResolutionErrorTable(_resolution_error_size); 1964 _invoke_method_table = new SymbolPropertyTable(_invoke_method_size); 1965 _pd_cache_table = new ProtectionDomainCacheTable(defaultProtectionDomainCacheSize); 1966 1967 // Allocate private object used as system class loader lock 1968 _system_loader_lock_obj = oopFactory::new_intArray(0, CHECK); 1969 // Initialize basic classes 1970 initialize_preloaded_classes(CHECK); 1971 1972 CDS_ONLY(SystemDictionaryShared::initialize_locks();) 1973 } 1974 1975 // Compact table of directions on the initialization of klasses: 1976 static const short wk_init_info[] = { 1977 #define WK_KLASS_INIT_INFO(name, symbol, option) \ 1978 ( ((int)vmSymbols::VM_SYMBOL_ENUM_NAME(symbol) \ 1979 << SystemDictionary::CEIL_LG_OPTION_LIMIT) \ 1980 | (int)SystemDictionary::option ), 1981 WK_KLASSES_DO(WK_KLASS_INIT_INFO) 1982 #undef WK_KLASS_INIT_INFO 1983 0 1984 }; 1985 1986 bool SystemDictionary::initialize_wk_klass(WKID id, int init_opt, TRAPS) { 1987 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); 1988 int info = wk_init_info[id - FIRST_WKID]; 1989 int sid = (info >> CEIL_LG_OPTION_LIMIT); 1990 Symbol* symbol = vmSymbols::symbol_at((vmSymbols::SID)sid); 1991 InstanceKlass** klassp = &_well_known_klasses[id]; 1992 |