diff -r 6e825ad773c6 -r 60b728ec77c1 src/share/vm/classfile/systemDictionary.cpp --- a/src/share/vm/classfile/systemDictionary.cpp Tue Apr 29 19:40:51 2008 -0700 +++ b/src/share/vm/classfile/systemDictionary.cpp Tue Apr 29 19:45:22 2008 -0700 @@ -37,71 +37,9 @@ oop SystemDictionary::_system_loader_lock_obj = NULL; -klassOop SystemDictionary::_object_klass = NULL; -klassOop SystemDictionary::_string_klass = NULL; -klassOop SystemDictionary::_class_klass = NULL; -klassOop SystemDictionary::_cloneable_klass = NULL; -klassOop SystemDictionary::_classloader_klass = NULL; -klassOop SystemDictionary::_serializable_klass = NULL; -klassOop SystemDictionary::_system_klass = NULL; +klassOop SystemDictionary::_well_known_klasses[SystemDictionary::WKID_LIMIT] + = { NULL /*, NULL...*/ }; -klassOop SystemDictionary::_throwable_klass = NULL; -klassOop SystemDictionary::_error_klass = NULL; -klassOop SystemDictionary::_threaddeath_klass = NULL; -klassOop SystemDictionary::_exception_klass = NULL; -klassOop SystemDictionary::_runtime_exception_klass = NULL; -klassOop SystemDictionary::_classNotFoundException_klass = NULL; -klassOop SystemDictionary::_noClassDefFoundError_klass = NULL; -klassOop SystemDictionary::_linkageError_klass = NULL; -klassOop SystemDictionary::_classCastException_klass = NULL; -klassOop SystemDictionary::_arrayStoreException_klass = NULL; -klassOop SystemDictionary::_virtualMachineError_klass = NULL; -klassOop SystemDictionary::_outOfMemoryError_klass = NULL; -klassOop SystemDictionary::_StackOverflowError_klass = NULL; -klassOop SystemDictionary::_illegalMonitorStateException_klass = NULL; -klassOop SystemDictionary::_protectionDomain_klass = NULL; -klassOop SystemDictionary::_AccessControlContext_klass = NULL; - -klassOop SystemDictionary::_reference_klass = NULL; -klassOop SystemDictionary::_soft_reference_klass = NULL; -klassOop SystemDictionary::_weak_reference_klass = NULL; -klassOop SystemDictionary::_final_reference_klass = NULL; -klassOop SystemDictionary::_phantom_reference_klass = NULL; -klassOop SystemDictionary::_finalizer_klass = NULL; - -klassOop SystemDictionary::_thread_klass = NULL; -klassOop SystemDictionary::_threadGroup_klass = NULL; -klassOop SystemDictionary::_properties_klass = NULL; -klassOop SystemDictionary::_reflect_accessible_object_klass = NULL; -klassOop SystemDictionary::_reflect_field_klass = NULL; -klassOop SystemDictionary::_reflect_method_klass = NULL; -klassOop SystemDictionary::_reflect_constructor_klass = NULL; -klassOop SystemDictionary::_reflect_magic_klass = NULL; -klassOop SystemDictionary::_reflect_method_accessor_klass = NULL; -klassOop SystemDictionary::_reflect_constructor_accessor_klass = NULL; -klassOop SystemDictionary::_reflect_delegating_classloader_klass = NULL; -klassOop SystemDictionary::_reflect_constant_pool_klass = NULL; -klassOop SystemDictionary::_reflect_unsafe_static_field_accessor_impl_klass = NULL; - -klassOop SystemDictionary::_vector_klass = NULL; -klassOop SystemDictionary::_hashtable_klass = NULL; -klassOop SystemDictionary::_stringBuffer_klass = NULL; - -klassOop SystemDictionary::_stackTraceElement_klass = NULL; - -klassOop SystemDictionary::_java_nio_Buffer_klass = NULL; - -klassOop SystemDictionary::_sun_misc_AtomicLongCSImpl_klass = NULL; -klassOop SystemDictionary::_sun_jkernel_DownloadManager_klass = NULL; - -klassOop SystemDictionary::_boolean_klass = NULL; -klassOop SystemDictionary::_char_klass = NULL; -klassOop SystemDictionary::_float_klass = NULL; -klassOop SystemDictionary::_double_klass = NULL; -klassOop SystemDictionary::_byte_klass = NULL; -klassOop SystemDictionary::_short_klass = NULL; -klassOop SystemDictionary::_int_klass = NULL; -klassOop SystemDictionary::_long_klass = NULL; klassOop SystemDictionary::_box_klasses[T_VOID+1] = { NULL /*, NULL...*/ }; oop SystemDictionary::_java_system_loader = NULL; @@ -121,10 +59,10 @@ } void SystemDictionary::compute_java_system_loader(TRAPS) { - KlassHandle system_klass(THREAD, _classloader_klass); + KlassHandle system_klass(THREAD, WK_KLASS(classloader_klass)); JavaValue result(T_OBJECT); JavaCalls::call_static(&result, - KlassHandle(THREAD, _classloader_klass), + KlassHandle(THREAD, WK_KLASS(classloader_klass)), vmSymbolHandles::getSystemClassLoader_name(), vmSymbolHandles::void_classloader_signature(), CHECK); @@ -292,6 +230,15 @@ bool is_superclass, TRAPS) { + // Try to get one of the well-known klasses. + // They are trusted, and do not participate in circularities. + if (LinkWellKnownClasses) { + klassOop k = find_well_known_klass(class_name()); + if (k != NULL) { + return k; + } + } + // Double-check, if child class is already loaded, just return super-class,interface // Don't add a placedholder if already loaded, i.e. already in system dictionary // Make sure there's a placeholder for the *child* before resolving. @@ -919,6 +866,15 @@ TRAPS) { klassOop k = NULL; assert(class_name() != NULL, "class name must be non NULL"); + + // Try to get one of the well-known klasses. + if (LinkWellKnownClasses) { + k = find_well_known_klass(class_name()); + if (k != NULL) { + return k; + } + } + if (FieldType::is_array(class_name())) { // The name refers to an array. Parse the name. jint dimension; @@ -942,6 +898,38 @@ return k; } +// Quick range check for names of well-known classes: +static symbolOop wk_klass_name_limits[2] = {NULL, NULL}; + +#ifndef PRODUCT +static int find_wkk_calls, find_wkk_probes, find_wkk_wins; +// counts for "hello world": 3983, 1616, 1075 +// => 60% hit after limit guard, 25% total win rate +#endif + +klassOop SystemDictionary::find_well_known_klass(symbolOop class_name) { + // A bounds-check on class_name will quickly get a negative result. + NOT_PRODUCT(find_wkk_calls++); + if (class_name >= wk_klass_name_limits[0] && + class_name <= wk_klass_name_limits[1]) { + NOT_PRODUCT(find_wkk_probes++); + vmSymbols::SID sid = vmSymbols::find_sid(class_name); + if (sid != vmSymbols::NO_SID) { + klassOop k = NULL; + switch (sid) { + #define WK_KLASS_CASE(name, symbol, ignore_option) \ + case vmSymbols::VM_SYMBOL_ENUM_NAME(symbol): \ + k = WK_KLASS(name); break; + WK_KLASSES_DO(WK_KLASS_CASE) + #undef WK_KLASS_CASE + } + NOT_PRODUCT(if (k != NULL) find_wkk_wins++); + return k; + } + } + return NULL; +} + // Note: this method is much like resolve_from_stream, but // updates no supplemental data structures. // TODO consolidate the two methods with a helper routine? @@ -1684,71 +1672,13 @@ void SystemDictionary::preloaded_oops_do(OopClosure* f) { - f->do_oop((oop*) &_string_klass); - f->do_oop((oop*) &_object_klass); - f->do_oop((oop*) &_class_klass); - f->do_oop((oop*) &_cloneable_klass); - f->do_oop((oop*) &_classloader_klass); - f->do_oop((oop*) &_serializable_klass); - f->do_oop((oop*) &_system_klass); + f->do_oop((oop*) &wk_klass_name_limits[0]); + f->do_oop((oop*) &wk_klass_name_limits[1]); - f->do_oop((oop*) &_throwable_klass); - f->do_oop((oop*) &_error_klass); - f->do_oop((oop*) &_threaddeath_klass); - f->do_oop((oop*) &_exception_klass); - f->do_oop((oop*) &_runtime_exception_klass); - f->do_oop((oop*) &_classNotFoundException_klass); - f->do_oop((oop*) &_noClassDefFoundError_klass); - f->do_oop((oop*) &_linkageError_klass); - f->do_oop((oop*) &_classCastException_klass); - f->do_oop((oop*) &_arrayStoreException_klass); - f->do_oop((oop*) &_virtualMachineError_klass); - f->do_oop((oop*) &_outOfMemoryError_klass); - f->do_oop((oop*) &_StackOverflowError_klass); - f->do_oop((oop*) &_illegalMonitorStateException_klass); - f->do_oop((oop*) &_protectionDomain_klass); - f->do_oop((oop*) &_AccessControlContext_klass); + for (int k = (int)FIRST_WKID; k < (int)WKID_LIMIT; k++) { + f->do_oop((oop*) &_well_known_klasses[k]); + } - f->do_oop((oop*) &_reference_klass); - f->do_oop((oop*) &_soft_reference_klass); - f->do_oop((oop*) &_weak_reference_klass); - f->do_oop((oop*) &_final_reference_klass); - f->do_oop((oop*) &_phantom_reference_klass); - f->do_oop((oop*) &_finalizer_klass); - - f->do_oop((oop*) &_thread_klass); - f->do_oop((oop*) &_threadGroup_klass); - f->do_oop((oop*) &_properties_klass); - f->do_oop((oop*) &_reflect_accessible_object_klass); - f->do_oop((oop*) &_reflect_field_klass); - f->do_oop((oop*) &_reflect_method_klass); - f->do_oop((oop*) &_reflect_constructor_klass); - f->do_oop((oop*) &_reflect_magic_klass); - f->do_oop((oop*) &_reflect_method_accessor_klass); - f->do_oop((oop*) &_reflect_constructor_accessor_klass); - f->do_oop((oop*) &_reflect_delegating_classloader_klass); - f->do_oop((oop*) &_reflect_constant_pool_klass); - f->do_oop((oop*) &_reflect_unsafe_static_field_accessor_impl_klass); - - f->do_oop((oop*) &_stringBuffer_klass); - f->do_oop((oop*) &_vector_klass); - f->do_oop((oop*) &_hashtable_klass); - - f->do_oop((oop*) &_stackTraceElement_klass); - - f->do_oop((oop*) &_java_nio_Buffer_klass); - - f->do_oop((oop*) &_sun_misc_AtomicLongCSImpl_klass); - f->do_oop((oop*) &_sun_jkernel_DownloadManager_klass); - - f->do_oop((oop*) &_boolean_klass); - f->do_oop((oop*) &_char_klass); - f->do_oop((oop*) &_float_klass); - f->do_oop((oop*) &_double_klass); - f->do_oop((oop*) &_byte_klass); - f->do_oop((oop*) &_short_klass); - f->do_oop((oop*) &_int_klass); - f->do_oop((oop*) &_long_klass); { for (int i = 0; i < T_VOID+1; i++) { if (_box_klasses[i] != NULL) { @@ -1841,14 +1771,72 @@ initialize_preloaded_classes(CHECK); } +// Compact table of directions on the initialization of klasses: +static const short wk_init_info[] = { + #define WK_KLASS_INIT_INFO(name, symbol, option) \ + ( ((int)vmSymbols::VM_SYMBOL_ENUM_NAME(symbol) \ + << SystemDictionary::CEIL_LG_OPTION_LIMIT) \ + | (int)SystemDictionary::option ), + WK_KLASSES_DO(WK_KLASS_INIT_INFO) + #undef WK_KLASS_INIT_INFO + 0 +}; + +bool SystemDictionary::initialize_wk_klass(WKID id, int init_opt, TRAPS) { + assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); + int info = wk_init_info[id - FIRST_WKID]; + int sid = (info >> CEIL_LG_OPTION_LIMIT); + symbolHandle symbol = vmSymbolHandles::symbol_handle_at((vmSymbols::SID)sid); + klassOop* klassp = &_well_known_klasses[id]; + bool must_load = (init_opt < SystemDictionary::Opt); + bool try_load = true; + if (init_opt == SystemDictionary::Opt_Kernel) { +#ifndef KERNEL + try_load = false; +#endif //KERNEL + } + if ((*klassp) == NULL && try_load) { + if (must_load) { + (*klassp) = resolve_or_fail(symbol, true, CHECK_0); // load required class + } else { + (*klassp) = resolve_or_null(symbol, CHECK_0); // load optional klass + } + } + return ((*klassp) != NULL); +} + +void SystemDictionary::initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS) { + assert((int)start_id <= (int)limit_id, "IDs are out of order!"); + for (int id = (int)start_id; id < (int)limit_id; id++) { + assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); + int info = wk_init_info[id - FIRST_WKID]; + int sid = (info >> CEIL_LG_OPTION_LIMIT); + int opt = (info & right_n_bits(CEIL_LG_OPTION_LIMIT)); + + initialize_wk_klass((WKID)id, opt, CHECK); + + // Update limits, so find_well_known_klass can be very fast: + symbolOop s = vmSymbols::symbol_at((vmSymbols::SID)sid); + if (wk_klass_name_limits[1] == NULL) { + wk_klass_name_limits[0] = wk_klass_name_limits[1] = s; + } else if (wk_klass_name_limits[1] < s) { + wk_klass_name_limits[1] = s; + } else if (wk_klass_name_limits[0] > s) { + wk_klass_name_limits[0] = s; + } + } +} + void SystemDictionary::initialize_preloaded_classes(TRAPS) { - assert(_object_klass == NULL, "preloaded classes should only be initialized once"); + assert(WK_KLASS(object_klass) == NULL, "preloaded classes should only be initialized once"); // Preload commonly used klasses - _object_klass = resolve_or_fail(vmSymbolHandles::java_lang_Object(), true, CHECK); - _string_klass = resolve_or_fail(vmSymbolHandles::java_lang_String(), true, CHECK); - _class_klass = resolve_or_fail(vmSymbolHandles::java_lang_Class(), true, CHECK); - debug_only(instanceKlass::verify_class_klass_nonstatic_oop_maps(_class_klass)); + WKID scan = FIRST_WKID; + // first do Object, String, Class + initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(class_klass), scan, CHECK); + + debug_only(instanceKlass::verify_class_klass_nonstatic_oop_maps(WK_KLASS(class_klass))); + // Fixup mirrors for classes loaded before java.lang.Class. // These calls iterate over the objects currently in the perm gen // so calling them at this point is matters (not before when there @@ -1857,100 +1845,37 @@ Universe::initialize_basic_type_mirrors(CHECK); Universe::fixup_mirrors(CHECK); - _cloneable_klass = resolve_or_fail(vmSymbolHandles::java_lang_Cloneable(), true, CHECK); - _classloader_klass = resolve_or_fail(vmSymbolHandles::java_lang_ClassLoader(), true, CHECK); - _serializable_klass = resolve_or_fail(vmSymbolHandles::java_io_Serializable(), true, CHECK); - _system_klass = resolve_or_fail(vmSymbolHandles::java_lang_System(), true, CHECK); - - _throwable_klass = resolve_or_fail(vmSymbolHandles::java_lang_Throwable(), true, CHECK); - _error_klass = resolve_or_fail(vmSymbolHandles::java_lang_Error(), true, CHECK); - _threaddeath_klass = resolve_or_fail(vmSymbolHandles::java_lang_ThreadDeath(), true, CHECK); - _exception_klass = resolve_or_fail(vmSymbolHandles::java_lang_Exception(), true, CHECK); - _runtime_exception_klass = resolve_or_fail(vmSymbolHandles::java_lang_RuntimeException(), true, CHECK); - _protectionDomain_klass = resolve_or_fail(vmSymbolHandles::java_security_ProtectionDomain(), true, CHECK); - _AccessControlContext_klass = resolve_or_fail(vmSymbolHandles::java_security_AccessControlContext(), true, CHECK); - _classNotFoundException_klass = resolve_or_fail(vmSymbolHandles::java_lang_ClassNotFoundException(), true, CHECK); - _noClassDefFoundError_klass = resolve_or_fail(vmSymbolHandles::java_lang_NoClassDefFoundError(), true, CHECK); - _linkageError_klass = resolve_or_fail(vmSymbolHandles::java_lang_LinkageError(), true, CHECK); - _classCastException_klass = resolve_or_fail(vmSymbolHandles::java_lang_ClassCastException(), true, CHECK); - _arrayStoreException_klass = resolve_or_fail(vmSymbolHandles::java_lang_ArrayStoreException(), true, CHECK); - _virtualMachineError_klass = resolve_or_fail(vmSymbolHandles::java_lang_VirtualMachineError(), true, CHECK); - _outOfMemoryError_klass = resolve_or_fail(vmSymbolHandles::java_lang_OutOfMemoryError(), true, CHECK); - _StackOverflowError_klass = resolve_or_fail(vmSymbolHandles::java_lang_StackOverflowError(), true, CHECK); - _illegalMonitorStateException_klass = resolve_or_fail(vmSymbolHandles::java_lang_IllegalMonitorStateException(), true, CHECK); + // do a bunch more: + initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(reference_klass), scan, CHECK); // Preload ref klasses and set reference types - _reference_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_Reference(), true, CHECK); - instanceKlass::cast(_reference_klass)->set_reference_type(REF_OTHER); - instanceRefKlass::update_nonstatic_oop_maps(_reference_klass); + instanceKlass::cast(WK_KLASS(reference_klass))->set_reference_type(REF_OTHER); + instanceRefKlass::update_nonstatic_oop_maps(WK_KLASS(reference_klass)); - _soft_reference_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_SoftReference(), true, CHECK); - instanceKlass::cast(_soft_reference_klass)->set_reference_type(REF_SOFT); - _weak_reference_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_WeakReference(), true, CHECK); - instanceKlass::cast(_weak_reference_klass)->set_reference_type(REF_WEAK); - _final_reference_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_FinalReference(), true, CHECK); - instanceKlass::cast(_final_reference_klass)->set_reference_type(REF_FINAL); - _phantom_reference_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_PhantomReference(), true, CHECK); - instanceKlass::cast(_phantom_reference_klass)->set_reference_type(REF_PHANTOM); - _finalizer_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_Finalizer(), true, CHECK); + initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(phantom_reference_klass), scan, CHECK); + instanceKlass::cast(WK_KLASS(soft_reference_klass))->set_reference_type(REF_SOFT); + instanceKlass::cast(WK_KLASS(weak_reference_klass))->set_reference_type(REF_WEAK); + instanceKlass::cast(WK_KLASS(final_reference_klass))->set_reference_type(REF_FINAL); + instanceKlass::cast(WK_KLASS(phantom_reference_klass))->set_reference_type(REF_PHANTOM); - _thread_klass = resolve_or_fail(vmSymbolHandles::java_lang_Thread(), true, CHECK); - _threadGroup_klass = resolve_or_fail(vmSymbolHandles::java_lang_ThreadGroup(), true, CHECK); - _properties_klass = resolve_or_fail(vmSymbolHandles::java_util_Properties(), true, CHECK); - _reflect_accessible_object_klass = resolve_or_fail(vmSymbolHandles::java_lang_reflect_AccessibleObject(), true, CHECK); - _reflect_field_klass = resolve_or_fail(vmSymbolHandles::java_lang_reflect_Field(), true, CHECK); - _reflect_method_klass = resolve_or_fail(vmSymbolHandles::java_lang_reflect_Method(), true, CHECK); - _reflect_constructor_klass = resolve_or_fail(vmSymbolHandles::java_lang_reflect_Constructor(), true, CHECK); - // Universe::is_gte_jdk14x_version() is not set up by this point. - // It's okay if these turn out to be NULL in non-1.4 JDKs. - _reflect_magic_klass = resolve_or_null(vmSymbolHandles::sun_reflect_MagicAccessorImpl(), CHECK); - _reflect_method_accessor_klass = resolve_or_null(vmSymbolHandles::sun_reflect_MethodAccessorImpl(), CHECK); - _reflect_constructor_accessor_klass = resolve_or_null(vmSymbolHandles::sun_reflect_ConstructorAccessorImpl(), CHECK); - _reflect_delegating_classloader_klass = resolve_or_null(vmSymbolHandles::sun_reflect_DelegatingClassLoader(), CHECK); - _reflect_constant_pool_klass = resolve_or_null(vmSymbolHandles::sun_reflect_ConstantPool(), CHECK); - _reflect_unsafe_static_field_accessor_impl_klass = resolve_or_null(vmSymbolHandles::sun_reflect_UnsafeStaticFieldAccessorImpl(), CHECK); + initialize_wk_klasses_until(WKID_LIMIT, scan, CHECK); - _vector_klass = resolve_or_fail(vmSymbolHandles::java_util_Vector(), true, CHECK); - _hashtable_klass = resolve_or_fail(vmSymbolHandles::java_util_Hashtable(), true, CHECK); - _stringBuffer_klass = resolve_or_fail(vmSymbolHandles::java_lang_StringBuffer(), true, CHECK); + _box_klasses[T_BOOLEAN] = WK_KLASS(boolean_klass); + _box_klasses[T_CHAR] = WK_KLASS(char_klass); + _box_klasses[T_FLOAT] = WK_KLASS(float_klass); + _box_klasses[T_DOUBLE] = WK_KLASS(double_klass); + _box_klasses[T_BYTE] = WK_KLASS(byte_klass); + _box_klasses[T_SHORT] = WK_KLASS(short_klass); + _box_klasses[T_INT] = WK_KLASS(int_klass); + _box_klasses[T_LONG] = WK_KLASS(long_klass); + //_box_klasses[T_OBJECT] = WK_KLASS(object_klass); + //_box_klasses[T_ARRAY] = WK_KLASS(object_klass); - // It's NULL in non-1.4 JDKs. - _stackTraceElement_klass = resolve_or_null(vmSymbolHandles::java_lang_StackTraceElement(), CHECK); - - // Universe::is_gte_jdk14x_version() is not set up by this point. - // It's okay if this turns out to be NULL in non-1.4 JDKs. - _java_nio_Buffer_klass = resolve_or_null(vmSymbolHandles::java_nio_Buffer(), CHECK); - - // If this class isn't present, it won't be referenced. - _sun_misc_AtomicLongCSImpl_klass = resolve_or_null(vmSymbolHandles::sun_misc_AtomicLongCSImpl(), CHECK); #ifdef KERNEL - _sun_jkernel_DownloadManager_klass = resolve_or_null(vmSymbolHandles::sun_jkernel_DownloadManager(), CHECK); - if (_sun_jkernel_DownloadManager_klass == NULL) { + if (sun_jkernel_DownloadManager_klass() == NULL) { warning("Cannot find sun/jkernel/DownloadManager"); } #endif // KERNEL - - // Preload boxing klasses - _boolean_klass = resolve_or_fail(vmSymbolHandles::java_lang_Boolean(), true, CHECK); - _char_klass = resolve_or_fail(vmSymbolHandles::java_lang_Character(), true, CHECK); - _float_klass = resolve_or_fail(vmSymbolHandles::java_lang_Float(), true, CHECK); - _double_klass = resolve_or_fail(vmSymbolHandles::java_lang_Double(), true, CHECK); - _byte_klass = resolve_or_fail(vmSymbolHandles::java_lang_Byte(), true, CHECK); - _short_klass = resolve_or_fail(vmSymbolHandles::java_lang_Short(), true, CHECK); - _int_klass = resolve_or_fail(vmSymbolHandles::java_lang_Integer(), true, CHECK); - _long_klass = resolve_or_fail(vmSymbolHandles::java_lang_Long(), true, CHECK); - - _box_klasses[T_BOOLEAN] = _boolean_klass; - _box_klasses[T_CHAR] = _char_klass; - _box_klasses[T_FLOAT] = _float_klass; - _box_klasses[T_DOUBLE] = _double_klass; - _box_klasses[T_BYTE] = _byte_klass; - _box_klasses[T_SHORT] = _short_klass; - _box_klasses[T_INT] = _int_klass; - _box_klasses[T_LONG] = _long_klass; - //_box_klasses[T_OBJECT] = _object_klass; - //_box_klasses[T_ARRAY] = _object_klass; - { // Compute whether we should use loadClass or loadClassInternal when loading classes. methodOop method = instanceKlass::cast(classloader_klass())->find_method(vmSymbols::loadClassInternal_name(), vmSymbols::string_class_signature()); _has_loadClassInternal = (method != NULL);