comparison src/share/vm/classfile/systemDictionary.cpp @ 132:60b728ec77c1

6652736: well known classes in system dictionary are inefficiently processed Summary: combine many scalar variables into a single enum-indexed array in SystemDictionary. Reviewed-by: kvn
author jrose
date Tue, 29 Apr 2008 19:45:22 -0700
parents 90f5ddc7297b
children d1605aabd0a1
comparison
equal deleted inserted replaced
131:6e825ad773c6 132:60b728ec77c1
35 35
36 int SystemDictionary::_number_of_modifications = 0; 36 int SystemDictionary::_number_of_modifications = 0;
37 37
38 oop SystemDictionary::_system_loader_lock_obj = NULL; 38 oop SystemDictionary::_system_loader_lock_obj = NULL;
39 39
40 klassOop SystemDictionary::_object_klass = NULL; 40 klassOop SystemDictionary::_well_known_klasses[SystemDictionary::WKID_LIMIT]
41 klassOop SystemDictionary::_string_klass = NULL; 41 = { NULL /*, NULL...*/ };
42 klassOop SystemDictionary::_class_klass = NULL; 42
43 klassOop SystemDictionary::_cloneable_klass = NULL;
44 klassOop SystemDictionary::_classloader_klass = NULL;
45 klassOop SystemDictionary::_serializable_klass = NULL;
46 klassOop SystemDictionary::_system_klass = NULL;
47
48 klassOop SystemDictionary::_throwable_klass = NULL;
49 klassOop SystemDictionary::_error_klass = NULL;
50 klassOop SystemDictionary::_threaddeath_klass = NULL;
51 klassOop SystemDictionary::_exception_klass = NULL;
52 klassOop SystemDictionary::_runtime_exception_klass = NULL;
53 klassOop SystemDictionary::_classNotFoundException_klass = NULL;
54 klassOop SystemDictionary::_noClassDefFoundError_klass = NULL;
55 klassOop SystemDictionary::_linkageError_klass = NULL;
56 klassOop SystemDictionary::_classCastException_klass = NULL;
57 klassOop SystemDictionary::_arrayStoreException_klass = NULL;
58 klassOop SystemDictionary::_virtualMachineError_klass = NULL;
59 klassOop SystemDictionary::_outOfMemoryError_klass = NULL;
60 klassOop SystemDictionary::_StackOverflowError_klass = NULL;
61 klassOop SystemDictionary::_illegalMonitorStateException_klass = NULL;
62 klassOop SystemDictionary::_protectionDomain_klass = NULL;
63 klassOop SystemDictionary::_AccessControlContext_klass = NULL;
64
65 klassOop SystemDictionary::_reference_klass = NULL;
66 klassOop SystemDictionary::_soft_reference_klass = NULL;
67 klassOop SystemDictionary::_weak_reference_klass = NULL;
68 klassOop SystemDictionary::_final_reference_klass = NULL;
69 klassOop SystemDictionary::_phantom_reference_klass = NULL;
70 klassOop SystemDictionary::_finalizer_klass = NULL;
71
72 klassOop SystemDictionary::_thread_klass = NULL;
73 klassOop SystemDictionary::_threadGroup_klass = NULL;
74 klassOop SystemDictionary::_properties_klass = NULL;
75 klassOop SystemDictionary::_reflect_accessible_object_klass = NULL;
76 klassOop SystemDictionary::_reflect_field_klass = NULL;
77 klassOop SystemDictionary::_reflect_method_klass = NULL;
78 klassOop SystemDictionary::_reflect_constructor_klass = NULL;
79 klassOop SystemDictionary::_reflect_magic_klass = NULL;
80 klassOop SystemDictionary::_reflect_method_accessor_klass = NULL;
81 klassOop SystemDictionary::_reflect_constructor_accessor_klass = NULL;
82 klassOop SystemDictionary::_reflect_delegating_classloader_klass = NULL;
83 klassOop SystemDictionary::_reflect_constant_pool_klass = NULL;
84 klassOop SystemDictionary::_reflect_unsafe_static_field_accessor_impl_klass = NULL;
85
86 klassOop SystemDictionary::_vector_klass = NULL;
87 klassOop SystemDictionary::_hashtable_klass = NULL;
88 klassOop SystemDictionary::_stringBuffer_klass = NULL;
89
90 klassOop SystemDictionary::_stackTraceElement_klass = NULL;
91
92 klassOop SystemDictionary::_java_nio_Buffer_klass = NULL;
93
94 klassOop SystemDictionary::_sun_misc_AtomicLongCSImpl_klass = NULL;
95 klassOop SystemDictionary::_sun_jkernel_DownloadManager_klass = NULL;
96
97 klassOop SystemDictionary::_boolean_klass = NULL;
98 klassOop SystemDictionary::_char_klass = NULL;
99 klassOop SystemDictionary::_float_klass = NULL;
100 klassOop SystemDictionary::_double_klass = NULL;
101 klassOop SystemDictionary::_byte_klass = NULL;
102 klassOop SystemDictionary::_short_klass = NULL;
103 klassOop SystemDictionary::_int_klass = NULL;
104 klassOop SystemDictionary::_long_klass = NULL;
105 klassOop SystemDictionary::_box_klasses[T_VOID+1] = { NULL /*, NULL...*/ }; 43 klassOop SystemDictionary::_box_klasses[T_VOID+1] = { NULL /*, NULL...*/ };
106 44
107 oop SystemDictionary::_java_system_loader = NULL; 45 oop SystemDictionary::_java_system_loader = NULL;
108 46
109 bool SystemDictionary::_has_loadClassInternal = false; 47 bool SystemDictionary::_has_loadClassInternal = false;
119 oop SystemDictionary::java_system_loader() { 57 oop SystemDictionary::java_system_loader() {
120 return _java_system_loader; 58 return _java_system_loader;
121 } 59 }
122 60
123 void SystemDictionary::compute_java_system_loader(TRAPS) { 61 void SystemDictionary::compute_java_system_loader(TRAPS) {
124 KlassHandle system_klass(THREAD, _classloader_klass); 62 KlassHandle system_klass(THREAD, WK_KLASS(classloader_klass));
125 JavaValue result(T_OBJECT); 63 JavaValue result(T_OBJECT);
126 JavaCalls::call_static(&result, 64 JavaCalls::call_static(&result,
127 KlassHandle(THREAD, _classloader_klass), 65 KlassHandle(THREAD, WK_KLASS(classloader_klass)),
128 vmSymbolHandles::getSystemClassLoader_name(), 66 vmSymbolHandles::getSystemClassLoader_name(),
129 vmSymbolHandles::void_classloader_signature(), 67 vmSymbolHandles::void_classloader_signature(),
130 CHECK); 68 CHECK);
131 69
132 _java_system_loader = (oop)result.get_jobject(); 70 _java_system_loader = (oop)result.get_jobject();
289 symbolHandle class_name, 227 symbolHandle class_name,
290 Handle class_loader, 228 Handle class_loader,
291 Handle protection_domain, 229 Handle protection_domain,
292 bool is_superclass, 230 bool is_superclass,
293 TRAPS) { 231 TRAPS) {
232
233 // Try to get one of the well-known klasses.
234 // They are trusted, and do not participate in circularities.
235 if (LinkWellKnownClasses) {
236 klassOop k = find_well_known_klass(class_name());
237 if (k != NULL) {
238 return k;
239 }
240 }
294 241
295 // Double-check, if child class is already loaded, just return super-class,interface 242 // Double-check, if child class is already loaded, just return super-class,interface
296 // Don't add a placedholder if already loaded, i.e. already in system dictionary 243 // Don't add a placedholder if already loaded, i.e. already in system dictionary
297 // Make sure there's a placeholder for the *child* before resolving. 244 // Make sure there's a placeholder for the *child* before resolving.
298 // Used as a claim that this thread is currently loading superclass/classloader 245 // Used as a claim that this thread is currently loading superclass/classloader
917 Handle class_loader, 864 Handle class_loader,
918 Handle protection_domain, 865 Handle protection_domain,
919 TRAPS) { 866 TRAPS) {
920 klassOop k = NULL; 867 klassOop k = NULL;
921 assert(class_name() != NULL, "class name must be non NULL"); 868 assert(class_name() != NULL, "class name must be non NULL");
869
870 // Try to get one of the well-known klasses.
871 if (LinkWellKnownClasses) {
872 k = find_well_known_klass(class_name());
873 if (k != NULL) {
874 return k;
875 }
876 }
877
922 if (FieldType::is_array(class_name())) { 878 if (FieldType::is_array(class_name())) {
923 // The name refers to an array. Parse the name. 879 // The name refers to an array. Parse the name.
924 jint dimension; 880 jint dimension;
925 symbolOop object_key; 881 symbolOop object_key;
926 882
938 } 894 }
939 } else { 895 } else {
940 k = find(class_name, class_loader, protection_domain, THREAD); 896 k = find(class_name, class_loader, protection_domain, THREAD);
941 } 897 }
942 return k; 898 return k;
899 }
900
901 // Quick range check for names of well-known classes:
902 static symbolOop wk_klass_name_limits[2] = {NULL, NULL};
903
904 #ifndef PRODUCT
905 static int find_wkk_calls, find_wkk_probes, find_wkk_wins;
906 // counts for "hello world": 3983, 1616, 1075
907 // => 60% hit after limit guard, 25% total win rate
908 #endif
909
910 klassOop SystemDictionary::find_well_known_klass(symbolOop class_name) {
911 // A bounds-check on class_name will quickly get a negative result.
912 NOT_PRODUCT(find_wkk_calls++);
913 if (class_name >= wk_klass_name_limits[0] &&
914 class_name <= wk_klass_name_limits[1]) {
915 NOT_PRODUCT(find_wkk_probes++);
916 vmSymbols::SID sid = vmSymbols::find_sid(class_name);
917 if (sid != vmSymbols::NO_SID) {
918 klassOop k = NULL;
919 switch (sid) {
920 #define WK_KLASS_CASE(name, symbol, ignore_option) \
921 case vmSymbols::VM_SYMBOL_ENUM_NAME(symbol): \
922 k = WK_KLASS(name); break;
923 WK_KLASSES_DO(WK_KLASS_CASE)
924 #undef WK_KLASS_CASE
925 }
926 NOT_PRODUCT(if (k != NULL) find_wkk_wins++);
927 return k;
928 }
929 }
930 return NULL;
943 } 931 }
944 932
945 // Note: this method is much like resolve_from_stream, but 933 // Note: this method is much like resolve_from_stream, but
946 // updates no supplemental data structures. 934 // updates no supplemental data structures.
947 // TODO consolidate the two methods with a helper routine? 935 // TODO consolidate the two methods with a helper routine?
1682 resolution_errors()->oops_do(f); 1670 resolution_errors()->oops_do(f);
1683 } 1671 }
1684 1672
1685 1673
1686 void SystemDictionary::preloaded_oops_do(OopClosure* f) { 1674 void SystemDictionary::preloaded_oops_do(OopClosure* f) {
1687 f->do_oop((oop*) &_string_klass); 1675 f->do_oop((oop*) &wk_klass_name_limits[0]);
1688 f->do_oop((oop*) &_object_klass); 1676 f->do_oop((oop*) &wk_klass_name_limits[1]);
1689 f->do_oop((oop*) &_class_klass); 1677
1690 f->do_oop((oop*) &_cloneable_klass); 1678 for (int k = (int)FIRST_WKID; k < (int)WKID_LIMIT; k++) {
1691 f->do_oop((oop*) &_classloader_klass); 1679 f->do_oop((oop*) &_well_known_klasses[k]);
1692 f->do_oop((oop*) &_serializable_klass); 1680 }
1693 f->do_oop((oop*) &_system_klass); 1681
1694
1695 f->do_oop((oop*) &_throwable_klass);
1696 f->do_oop((oop*) &_error_klass);
1697 f->do_oop((oop*) &_threaddeath_klass);
1698 f->do_oop((oop*) &_exception_klass);
1699 f->do_oop((oop*) &_runtime_exception_klass);
1700 f->do_oop((oop*) &_classNotFoundException_klass);
1701 f->do_oop((oop*) &_noClassDefFoundError_klass);
1702 f->do_oop((oop*) &_linkageError_klass);
1703 f->do_oop((oop*) &_classCastException_klass);
1704 f->do_oop((oop*) &_arrayStoreException_klass);
1705 f->do_oop((oop*) &_virtualMachineError_klass);
1706 f->do_oop((oop*) &_outOfMemoryError_klass);
1707 f->do_oop((oop*) &_StackOverflowError_klass);
1708 f->do_oop((oop*) &_illegalMonitorStateException_klass);
1709 f->do_oop((oop*) &_protectionDomain_klass);
1710 f->do_oop((oop*) &_AccessControlContext_klass);
1711
1712 f->do_oop((oop*) &_reference_klass);
1713 f->do_oop((oop*) &_soft_reference_klass);
1714 f->do_oop((oop*) &_weak_reference_klass);
1715 f->do_oop((oop*) &_final_reference_klass);
1716 f->do_oop((oop*) &_phantom_reference_klass);
1717 f->do_oop((oop*) &_finalizer_klass);
1718
1719 f->do_oop((oop*) &_thread_klass);
1720 f->do_oop((oop*) &_threadGroup_klass);
1721 f->do_oop((oop*) &_properties_klass);
1722 f->do_oop((oop*) &_reflect_accessible_object_klass);
1723 f->do_oop((oop*) &_reflect_field_klass);
1724 f->do_oop((oop*) &_reflect_method_klass);
1725 f->do_oop((oop*) &_reflect_constructor_klass);
1726 f->do_oop((oop*) &_reflect_magic_klass);
1727 f->do_oop((oop*) &_reflect_method_accessor_klass);
1728 f->do_oop((oop*) &_reflect_constructor_accessor_klass);
1729 f->do_oop((oop*) &_reflect_delegating_classloader_klass);
1730 f->do_oop((oop*) &_reflect_constant_pool_klass);
1731 f->do_oop((oop*) &_reflect_unsafe_static_field_accessor_impl_klass);
1732
1733 f->do_oop((oop*) &_stringBuffer_klass);
1734 f->do_oop((oop*) &_vector_klass);
1735 f->do_oop((oop*) &_hashtable_klass);
1736
1737 f->do_oop((oop*) &_stackTraceElement_klass);
1738
1739 f->do_oop((oop*) &_java_nio_Buffer_klass);
1740
1741 f->do_oop((oop*) &_sun_misc_AtomicLongCSImpl_klass);
1742 f->do_oop((oop*) &_sun_jkernel_DownloadManager_klass);
1743
1744 f->do_oop((oop*) &_boolean_klass);
1745 f->do_oop((oop*) &_char_klass);
1746 f->do_oop((oop*) &_float_klass);
1747 f->do_oop((oop*) &_double_klass);
1748 f->do_oop((oop*) &_byte_klass);
1749 f->do_oop((oop*) &_short_klass);
1750 f->do_oop((oop*) &_int_klass);
1751 f->do_oop((oop*) &_long_klass);
1752 { 1682 {
1753 for (int i = 0; i < T_VOID+1; i++) { 1683 for (int i = 0; i < T_VOID+1; i++) {
1754 if (_box_klasses[i] != NULL) { 1684 if (_box_klasses[i] != NULL) {
1755 assert(i >= T_BOOLEAN, "checking"); 1685 assert(i >= T_BOOLEAN, "checking");
1756 f->do_oop((oop*) &_box_klasses[i]); 1686 f->do_oop((oop*) &_box_klasses[i]);
1839 _system_loader_lock_obj = oopFactory::new_system_objArray(0, CHECK); 1769 _system_loader_lock_obj = oopFactory::new_system_objArray(0, CHECK);
1840 // Initialize basic classes 1770 // Initialize basic classes
1841 initialize_preloaded_classes(CHECK); 1771 initialize_preloaded_classes(CHECK);
1842 } 1772 }
1843 1773
1774 // Compact table of directions on the initialization of klasses:
1775 static const short wk_init_info[] = {
1776 #define WK_KLASS_INIT_INFO(name, symbol, option) \
1777 ( ((int)vmSymbols::VM_SYMBOL_ENUM_NAME(symbol) \
1778 << SystemDictionary::CEIL_LG_OPTION_LIMIT) \
1779 | (int)SystemDictionary::option ),
1780 WK_KLASSES_DO(WK_KLASS_INIT_INFO)
1781 #undef WK_KLASS_INIT_INFO
1782 0
1783 };
1784
1785 bool SystemDictionary::initialize_wk_klass(WKID id, int init_opt, TRAPS) {
1786 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
1787 int info = wk_init_info[id - FIRST_WKID];
1788 int sid = (info >> CEIL_LG_OPTION_LIMIT);
1789 symbolHandle symbol = vmSymbolHandles::symbol_handle_at((vmSymbols::SID)sid);
1790 klassOop* klassp = &_well_known_klasses[id];
1791 bool must_load = (init_opt < SystemDictionary::Opt);
1792 bool try_load = true;
1793 if (init_opt == SystemDictionary::Opt_Kernel) {
1794 #ifndef KERNEL
1795 try_load = false;
1796 #endif //KERNEL
1797 }
1798 if ((*klassp) == NULL && try_load) {
1799 if (must_load) {
1800 (*klassp) = resolve_or_fail(symbol, true, CHECK_0); // load required class
1801 } else {
1802 (*klassp) = resolve_or_null(symbol, CHECK_0); // load optional klass
1803 }
1804 }
1805 return ((*klassp) != NULL);
1806 }
1807
1808 void SystemDictionary::initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS) {
1809 assert((int)start_id <= (int)limit_id, "IDs are out of order!");
1810 for (int id = (int)start_id; id < (int)limit_id; id++) {
1811 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
1812 int info = wk_init_info[id - FIRST_WKID];
1813 int sid = (info >> CEIL_LG_OPTION_LIMIT);
1814 int opt = (info & right_n_bits(CEIL_LG_OPTION_LIMIT));
1815
1816 initialize_wk_klass((WKID)id, opt, CHECK);
1817
1818 // Update limits, so find_well_known_klass can be very fast:
1819 symbolOop s = vmSymbols::symbol_at((vmSymbols::SID)sid);
1820 if (wk_klass_name_limits[1] == NULL) {
1821 wk_klass_name_limits[0] = wk_klass_name_limits[1] = s;
1822 } else if (wk_klass_name_limits[1] < s) {
1823 wk_klass_name_limits[1] = s;
1824 } else if (wk_klass_name_limits[0] > s) {
1825 wk_klass_name_limits[0] = s;
1826 }
1827 }
1828 }
1829
1844 1830
1845 void SystemDictionary::initialize_preloaded_classes(TRAPS) { 1831 void SystemDictionary::initialize_preloaded_classes(TRAPS) {
1846 assert(_object_klass == NULL, "preloaded classes should only be initialized once"); 1832 assert(WK_KLASS(object_klass) == NULL, "preloaded classes should only be initialized once");
1847 // Preload commonly used klasses 1833 // Preload commonly used klasses
1848 _object_klass = resolve_or_fail(vmSymbolHandles::java_lang_Object(), true, CHECK); 1834 WKID scan = FIRST_WKID;
1849 _string_klass = resolve_or_fail(vmSymbolHandles::java_lang_String(), true, CHECK); 1835 // first do Object, String, Class
1850 _class_klass = resolve_or_fail(vmSymbolHandles::java_lang_Class(), true, CHECK); 1836 initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(class_klass), scan, CHECK);
1851 debug_only(instanceKlass::verify_class_klass_nonstatic_oop_maps(_class_klass)); 1837
1838 debug_only(instanceKlass::verify_class_klass_nonstatic_oop_maps(WK_KLASS(class_klass)));
1839
1852 // Fixup mirrors for classes loaded before java.lang.Class. 1840 // Fixup mirrors for classes loaded before java.lang.Class.
1853 // These calls iterate over the objects currently in the perm gen 1841 // These calls iterate over the objects currently in the perm gen
1854 // so calling them at this point is matters (not before when there 1842 // so calling them at this point is matters (not before when there
1855 // are fewer objects and not later after there are more objects 1843 // are fewer objects and not later after there are more objects
1856 // in the perm gen. 1844 // in the perm gen.
1857 Universe::initialize_basic_type_mirrors(CHECK); 1845 Universe::initialize_basic_type_mirrors(CHECK);
1858 Universe::fixup_mirrors(CHECK); 1846 Universe::fixup_mirrors(CHECK);
1859 1847
1860 _cloneable_klass = resolve_or_fail(vmSymbolHandles::java_lang_Cloneable(), true, CHECK); 1848 // do a bunch more:
1861 _classloader_klass = resolve_or_fail(vmSymbolHandles::java_lang_ClassLoader(), true, CHECK); 1849 initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(reference_klass), scan, CHECK);
1862 _serializable_klass = resolve_or_fail(vmSymbolHandles::java_io_Serializable(), true, CHECK);
1863 _system_klass = resolve_or_fail(vmSymbolHandles::java_lang_System(), true, CHECK);
1864
1865 _throwable_klass = resolve_or_fail(vmSymbolHandles::java_lang_Throwable(), true, CHECK);
1866 _error_klass = resolve_or_fail(vmSymbolHandles::java_lang_Error(), true, CHECK);
1867 _threaddeath_klass = resolve_or_fail(vmSymbolHandles::java_lang_ThreadDeath(), true, CHECK);
1868 _exception_klass = resolve_or_fail(vmSymbolHandles::java_lang_Exception(), true, CHECK);
1869 _runtime_exception_klass = resolve_or_fail(vmSymbolHandles::java_lang_RuntimeException(), true, CHECK);
1870 _protectionDomain_klass = resolve_or_fail(vmSymbolHandles::java_security_ProtectionDomain(), true, CHECK);
1871 _AccessControlContext_klass = resolve_or_fail(vmSymbolHandles::java_security_AccessControlContext(), true, CHECK);
1872 _classNotFoundException_klass = resolve_or_fail(vmSymbolHandles::java_lang_ClassNotFoundException(), true, CHECK);
1873 _noClassDefFoundError_klass = resolve_or_fail(vmSymbolHandles::java_lang_NoClassDefFoundError(), true, CHECK);
1874 _linkageError_klass = resolve_or_fail(vmSymbolHandles::java_lang_LinkageError(), true, CHECK);
1875 _classCastException_klass = resolve_or_fail(vmSymbolHandles::java_lang_ClassCastException(), true, CHECK);
1876 _arrayStoreException_klass = resolve_or_fail(vmSymbolHandles::java_lang_ArrayStoreException(), true, CHECK);
1877 _virtualMachineError_klass = resolve_or_fail(vmSymbolHandles::java_lang_VirtualMachineError(), true, CHECK);
1878 _outOfMemoryError_klass = resolve_or_fail(vmSymbolHandles::java_lang_OutOfMemoryError(), true, CHECK);
1879 _StackOverflowError_klass = resolve_or_fail(vmSymbolHandles::java_lang_StackOverflowError(), true, CHECK);
1880 _illegalMonitorStateException_klass = resolve_or_fail(vmSymbolHandles::java_lang_IllegalMonitorStateException(), true, CHECK);
1881 1850
1882 // Preload ref klasses and set reference types 1851 // Preload ref klasses and set reference types
1883 _reference_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_Reference(), true, CHECK); 1852 instanceKlass::cast(WK_KLASS(reference_klass))->set_reference_type(REF_OTHER);
1884 instanceKlass::cast(_reference_klass)->set_reference_type(REF_OTHER); 1853 instanceRefKlass::update_nonstatic_oop_maps(WK_KLASS(reference_klass));
1885 instanceRefKlass::update_nonstatic_oop_maps(_reference_klass); 1854
1886 1855 initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(phantom_reference_klass), scan, CHECK);
1887 _soft_reference_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_SoftReference(), true, CHECK); 1856 instanceKlass::cast(WK_KLASS(soft_reference_klass))->set_reference_type(REF_SOFT);
1888 instanceKlass::cast(_soft_reference_klass)->set_reference_type(REF_SOFT); 1857 instanceKlass::cast(WK_KLASS(weak_reference_klass))->set_reference_type(REF_WEAK);
1889 _weak_reference_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_WeakReference(), true, CHECK); 1858 instanceKlass::cast(WK_KLASS(final_reference_klass))->set_reference_type(REF_FINAL);
1890 instanceKlass::cast(_weak_reference_klass)->set_reference_type(REF_WEAK); 1859 instanceKlass::cast(WK_KLASS(phantom_reference_klass))->set_reference_type(REF_PHANTOM);
1891 _final_reference_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_FinalReference(), true, CHECK); 1860
1892 instanceKlass::cast(_final_reference_klass)->set_reference_type(REF_FINAL); 1861 initialize_wk_klasses_until(WKID_LIMIT, scan, CHECK);
1893 _phantom_reference_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_PhantomReference(), true, CHECK); 1862
1894 instanceKlass::cast(_phantom_reference_klass)->set_reference_type(REF_PHANTOM); 1863 _box_klasses[T_BOOLEAN] = WK_KLASS(boolean_klass);
1895 _finalizer_klass = resolve_or_fail(vmSymbolHandles::java_lang_ref_Finalizer(), true, CHECK); 1864 _box_klasses[T_CHAR] = WK_KLASS(char_klass);
1896 1865 _box_klasses[T_FLOAT] = WK_KLASS(float_klass);
1897 _thread_klass = resolve_or_fail(vmSymbolHandles::java_lang_Thread(), true, CHECK); 1866 _box_klasses[T_DOUBLE] = WK_KLASS(double_klass);
1898 _threadGroup_klass = resolve_or_fail(vmSymbolHandles::java_lang_ThreadGroup(), true, CHECK); 1867 _box_klasses[T_BYTE] = WK_KLASS(byte_klass);
1899 _properties_klass = resolve_or_fail(vmSymbolHandles::java_util_Properties(), true, CHECK); 1868 _box_klasses[T_SHORT] = WK_KLASS(short_klass);
1900 _reflect_accessible_object_klass = resolve_or_fail(vmSymbolHandles::java_lang_reflect_AccessibleObject(), true, CHECK); 1869 _box_klasses[T_INT] = WK_KLASS(int_klass);
1901 _reflect_field_klass = resolve_or_fail(vmSymbolHandles::java_lang_reflect_Field(), true, CHECK); 1870 _box_klasses[T_LONG] = WK_KLASS(long_klass);
1902 _reflect_method_klass = resolve_or_fail(vmSymbolHandles::java_lang_reflect_Method(), true, CHECK); 1871 //_box_klasses[T_OBJECT] = WK_KLASS(object_klass);
1903 _reflect_constructor_klass = resolve_or_fail(vmSymbolHandles::java_lang_reflect_Constructor(), true, CHECK); 1872 //_box_klasses[T_ARRAY] = WK_KLASS(object_klass);
1904 // Universe::is_gte_jdk14x_version() is not set up by this point. 1873
1905 // It's okay if these turn out to be NULL in non-1.4 JDKs.
1906 _reflect_magic_klass = resolve_or_null(vmSymbolHandles::sun_reflect_MagicAccessorImpl(), CHECK);
1907 _reflect_method_accessor_klass = resolve_or_null(vmSymbolHandles::sun_reflect_MethodAccessorImpl(), CHECK);
1908 _reflect_constructor_accessor_klass = resolve_or_null(vmSymbolHandles::sun_reflect_ConstructorAccessorImpl(), CHECK);
1909 _reflect_delegating_classloader_klass = resolve_or_null(vmSymbolHandles::sun_reflect_DelegatingClassLoader(), CHECK);
1910 _reflect_constant_pool_klass = resolve_or_null(vmSymbolHandles::sun_reflect_ConstantPool(), CHECK);
1911 _reflect_unsafe_static_field_accessor_impl_klass = resolve_or_null(vmSymbolHandles::sun_reflect_UnsafeStaticFieldAccessorImpl(), CHECK);
1912
1913 _vector_klass = resolve_or_fail(vmSymbolHandles::java_util_Vector(), true, CHECK);
1914 _hashtable_klass = resolve_or_fail(vmSymbolHandles::java_util_Hashtable(), true, CHECK);
1915 _stringBuffer_klass = resolve_or_fail(vmSymbolHandles::java_lang_StringBuffer(), true, CHECK);
1916
1917 // It's NULL in non-1.4 JDKs.
1918 _stackTraceElement_klass = resolve_or_null(vmSymbolHandles::java_lang_StackTraceElement(), CHECK);
1919
1920 // Universe::is_gte_jdk14x_version() is not set up by this point.
1921 // It's okay if this turns out to be NULL in non-1.4 JDKs.
1922 _java_nio_Buffer_klass = resolve_or_null(vmSymbolHandles::java_nio_Buffer(), CHECK);
1923
1924 // If this class isn't present, it won't be referenced.
1925 _sun_misc_AtomicLongCSImpl_klass = resolve_or_null(vmSymbolHandles::sun_misc_AtomicLongCSImpl(), CHECK);
1926 #ifdef KERNEL 1874 #ifdef KERNEL
1927 _sun_jkernel_DownloadManager_klass = resolve_or_null(vmSymbolHandles::sun_jkernel_DownloadManager(), CHECK); 1875 if (sun_jkernel_DownloadManager_klass() == NULL) {
1928 if (_sun_jkernel_DownloadManager_klass == NULL) {
1929 warning("Cannot find sun/jkernel/DownloadManager"); 1876 warning("Cannot find sun/jkernel/DownloadManager");
1930 } 1877 }
1931 #endif // KERNEL 1878 #endif // KERNEL
1932
1933 // Preload boxing klasses
1934 _boolean_klass = resolve_or_fail(vmSymbolHandles::java_lang_Boolean(), true, CHECK);
1935 _char_klass = resolve_or_fail(vmSymbolHandles::java_lang_Character(), true, CHECK);
1936 _float_klass = resolve_or_fail(vmSymbolHandles::java_lang_Float(), true, CHECK);
1937 _double_klass = resolve_or_fail(vmSymbolHandles::java_lang_Double(), true, CHECK);
1938 _byte_klass = resolve_or_fail(vmSymbolHandles::java_lang_Byte(), true, CHECK);
1939 _short_klass = resolve_or_fail(vmSymbolHandles::java_lang_Short(), true, CHECK);
1940 _int_klass = resolve_or_fail(vmSymbolHandles::java_lang_Integer(), true, CHECK);
1941 _long_klass = resolve_or_fail(vmSymbolHandles::java_lang_Long(), true, CHECK);
1942
1943 _box_klasses[T_BOOLEAN] = _boolean_klass;
1944 _box_klasses[T_CHAR] = _char_klass;
1945 _box_klasses[T_FLOAT] = _float_klass;
1946 _box_klasses[T_DOUBLE] = _double_klass;
1947 _box_klasses[T_BYTE] = _byte_klass;
1948 _box_klasses[T_SHORT] = _short_klass;
1949 _box_klasses[T_INT] = _int_klass;
1950 _box_klasses[T_LONG] = _long_klass;
1951 //_box_klasses[T_OBJECT] = _object_klass;
1952 //_box_klasses[T_ARRAY] = _object_klass;
1953
1954 { // Compute whether we should use loadClass or loadClassInternal when loading classes. 1879 { // Compute whether we should use loadClass or loadClassInternal when loading classes.
1955 methodOop method = instanceKlass::cast(classloader_klass())->find_method(vmSymbols::loadClassInternal_name(), vmSymbols::string_class_signature()); 1880 methodOop method = instanceKlass::cast(classloader_klass())->find_method(vmSymbols::loadClassInternal_name(), vmSymbols::string_class_signature());
1956 _has_loadClassInternal = (method != NULL); 1881 _has_loadClassInternal = (method != NULL);
1957 } 1882 }
1958 1883