89 // a vmSymbol name (like java_lang_Object), and a flag word
90 // that makes some minor distinctions, like whether the klass
91 // is preloaded, optional, release-specific, etc.
92 // The order of these definitions is significant; it is the order in which
93 // preloading is actually performed by initialize_preloaded_classes.
94
95 #define WK_KLASSES_DO(do_klass) \
96 /* well-known classes */ \
97 do_klass(Object_klass, java_lang_Object, Pre ) \
98 do_klass(String_klass, java_lang_String, Pre ) \
99 do_klass(Class_klass, java_lang_Class, Pre ) \
100 do_klass(Cloneable_klass, java_lang_Cloneable, Pre ) \
101 do_klass(ClassLoader_klass, java_lang_ClassLoader, Pre ) \
102 do_klass(Serializable_klass, java_io_Serializable, Pre ) \
103 do_klass(System_klass, java_lang_System, Pre ) \
104 do_klass(Throwable_klass, java_lang_Throwable, Pre ) \
105 do_klass(Error_klass, java_lang_Error, Pre ) \
106 do_klass(ThreadDeath_klass, java_lang_ThreadDeath, Pre ) \
107 do_klass(Exception_klass, java_lang_Exception, Pre ) \
108 do_klass(RuntimeException_klass, java_lang_RuntimeException, Pre ) \
109 do_klass(ProtectionDomain_klass, java_security_ProtectionDomain, Pre ) \
110 do_klass(AccessControlContext_klass, java_security_AccessControlContext, Pre ) \
111 do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException, Pre ) \
112 do_klass(NoClassDefFoundError_klass, java_lang_NoClassDefFoundError, Pre ) \
113 do_klass(LinkageError_klass, java_lang_LinkageError, Pre ) \
114 do_klass(ClassCastException_klass, java_lang_ClassCastException, Pre ) \
115 do_klass(ArrayStoreException_klass, java_lang_ArrayStoreException, Pre ) \
116 do_klass(VirtualMachineError_klass, java_lang_VirtualMachineError, Pre ) \
117 do_klass(OutOfMemoryError_klass, java_lang_OutOfMemoryError, Pre ) \
118 do_klass(StackOverflowError_klass, java_lang_StackOverflowError, Pre ) \
119 do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException, Pre ) \
120 do_klass(Reference_klass, java_lang_ref_Reference, Pre ) \
121 \
122 /* Preload ref klasses and set reference types */ \
123 do_klass(SoftReference_klass, java_lang_ref_SoftReference, Pre ) \
124 do_klass(WeakReference_klass, java_lang_ref_WeakReference, Pre ) \
125 do_klass(FinalReference_klass, java_lang_ref_FinalReference, Pre ) \
126 do_klass(PhantomReference_klass, java_lang_ref_PhantomReference, Pre ) \
127 do_klass(Finalizer_klass, java_lang_ref_Finalizer, Pre ) \
128 \
129 do_klass(Thread_klass, java_lang_Thread, Pre ) \
130 do_klass(ThreadGroup_klass, java_lang_ThreadGroup, Pre ) \
131 do_klass(Properties_klass, java_util_Properties, Pre ) \
132 do_klass(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject, Pre ) \
133 do_klass(reflect_Field_klass, java_lang_reflect_Field, Pre ) \
134 do_klass(reflect_Parameter_klass, java_lang_reflect_Parameter, Opt ) \
135 do_klass(reflect_Method_klass, java_lang_reflect_Method, Pre ) \
136 do_klass(reflect_Constructor_klass, java_lang_reflect_Constructor, Pre ) \
137 \
138 /* NOTE: needed too early in bootstrapping process to have checks based on JDK version */ \
139 /* Universe::is_gte_jdk14x_version() is not set up by this point. */ \
140 /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
141 do_klass(lambda_MagicLambdaImpl_klass, java_lang_invoke_MagicLambdaImpl, Opt ) \
142 do_klass(reflect_MagicAccessorImpl_klass, sun_reflect_MagicAccessorImpl, Opt ) \
143 do_klass(reflect_MethodAccessorImpl_klass, sun_reflect_MethodAccessorImpl, Opt_Only_JDK14NewRef) \
144 do_klass(reflect_ConstructorAccessorImpl_klass, sun_reflect_ConstructorAccessorImpl, Opt_Only_JDK14NewRef) \
145 do_klass(reflect_DelegatingClassLoader_klass, sun_reflect_DelegatingClassLoader, Opt ) \
146 do_klass(reflect_ConstantPool_klass, sun_reflect_ConstantPool, Opt_Only_JDK15 ) \
147 do_klass(reflect_UnsafeStaticFieldAccessorImpl_klass, sun_reflect_UnsafeStaticFieldAccessorImpl, Opt_Only_JDK15 ) \
148 \
149 /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \
150 do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle, Pre_JSR292 ) \
151 do_klass(MemberName_klass, java_lang_invoke_MemberName, Pre_JSR292 ) \
152 do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives, Pre_JSR292 ) \
153 do_klass(LambdaForm_klass, java_lang_invoke_LambdaForm, Opt ) \
154 do_klass(MethodType_klass, java_lang_invoke_MethodType, Pre_JSR292 ) \
155 do_klass(BootstrapMethodError_klass, java_lang_BootstrapMethodError, Pre_JSR292 ) \
156 do_klass(CallSite_klass, java_lang_invoke_CallSite, Pre_JSR292 ) \
157 do_klass(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite, Pre_JSR292 ) \
158 do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite, Pre_JSR292 ) \
159 do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite, Pre_JSR292 ) \
160 /* Note: MethodHandle must be first, and VolatileCallSite last in group */ \
161 \
162 do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \
163 do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \
164 \
165 /* It's NULL in non-1.4 JDKs. */ \
166 do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \
167 /* Universe::is_gte_jdk14x_version() is not set up by this point. */ \
611 // Wait on SystemDictionary_lock; unlocks lockObject before
612 // waiting; relocks lockObject with correct recursion count
613 // after waiting, but before reentering SystemDictionary_lock
614 // to preserve lock order semantics.
615 static void double_lock_wait(Handle lockObject, TRAPS);
616 static void define_instance_class(instanceKlassHandle k, TRAPS);
617 static instanceKlassHandle find_or_define_instance_class(Symbol* class_name,
618 Handle class_loader,
619 instanceKlassHandle k, TRAPS);
620 static instanceKlassHandle load_shared_class(Symbol* class_name,
621 Handle class_loader, TRAPS);
622 static instanceKlassHandle load_shared_class(instanceKlassHandle ik,
623 Handle class_loader, TRAPS);
624 static void clean_up_shared_class(instanceKlassHandle ik, Handle class_loader, TRAPS);
625 static instanceKlassHandle load_instance_class(Symbol* class_name, Handle class_loader, TRAPS);
626 static Handle compute_loader_lock_object(Handle class_loader, TRAPS);
627 static void check_loader_lock_contention(Handle loader_lock, TRAPS);
628 static bool is_parallelCapable(Handle class_loader);
629 static bool is_parallelDefine(Handle class_loader);
630
631 static Klass* find_shared_class(Symbol* class_name);
632
633 // Setup link to hierarchy
634 static void add_to_hierarchy(instanceKlassHandle k, TRAPS);
635
636 private:
637 // We pass in the hashtable index so we can calculate it outside of
638 // the SystemDictionary_lock.
639
640 // Basic find on loaded classes
641 static Klass* find_class(int index, unsigned int hash,
642 Symbol* name, ClassLoaderData* loader_data);
643 static Klass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
644
645 // Basic find on classes in the midst of being loaded
646 static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
647
648 // Updating entry in dictionary
649 // Add a completely loaded class
650 static void add_klass(int index, Symbol* class_name,
651 ClassLoaderData* loader_data, KlassHandle obj);
652
653 // Add a placeholder for a class being loaded
654 static void add_placeholder(int index,
655 Symbol* class_name,
656 ClassLoaderData* loader_data);
|
89 // a vmSymbol name (like java_lang_Object), and a flag word
90 // that makes some minor distinctions, like whether the klass
91 // is preloaded, optional, release-specific, etc.
92 // The order of these definitions is significant; it is the order in which
93 // preloading is actually performed by initialize_preloaded_classes.
94
95 #define WK_KLASSES_DO(do_klass) \
96 /* well-known classes */ \
97 do_klass(Object_klass, java_lang_Object, Pre ) \
98 do_klass(String_klass, java_lang_String, Pre ) \
99 do_klass(Class_klass, java_lang_Class, Pre ) \
100 do_klass(Cloneable_klass, java_lang_Cloneable, Pre ) \
101 do_klass(ClassLoader_klass, java_lang_ClassLoader, Pre ) \
102 do_klass(Serializable_klass, java_io_Serializable, Pre ) \
103 do_klass(System_klass, java_lang_System, Pre ) \
104 do_klass(Throwable_klass, java_lang_Throwable, Pre ) \
105 do_klass(Error_klass, java_lang_Error, Pre ) \
106 do_klass(ThreadDeath_klass, java_lang_ThreadDeath, Pre ) \
107 do_klass(Exception_klass, java_lang_Exception, Pre ) \
108 do_klass(RuntimeException_klass, java_lang_RuntimeException, Pre ) \
109 do_klass(SecurityManager_klass, java_lang_SecurityManager, Pre ) \
110 do_klass(ProtectionDomain_klass, java_security_ProtectionDomain, Pre ) \
111 do_klass(AccessControlContext_klass, java_security_AccessControlContext, Pre ) \
112 do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException, Pre ) \
113 do_klass(NoClassDefFoundError_klass, java_lang_NoClassDefFoundError, Pre ) \
114 do_klass(LinkageError_klass, java_lang_LinkageError, Pre ) \
115 do_klass(ClassCastException_klass, java_lang_ClassCastException, Pre ) \
116 do_klass(ArrayStoreException_klass, java_lang_ArrayStoreException, Pre ) \
117 do_klass(VirtualMachineError_klass, java_lang_VirtualMachineError, Pre ) \
118 do_klass(OutOfMemoryError_klass, java_lang_OutOfMemoryError, Pre ) \
119 do_klass(StackOverflowError_klass, java_lang_StackOverflowError, Pre ) \
120 do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException, Pre ) \
121 do_klass(Reference_klass, java_lang_ref_Reference, Pre ) \
122 \
123 /* Preload ref klasses and set reference types */ \
124 do_klass(SoftReference_klass, java_lang_ref_SoftReference, Pre ) \
125 do_klass(WeakReference_klass, java_lang_ref_WeakReference, Pre ) \
126 do_klass(FinalReference_klass, java_lang_ref_FinalReference, Pre ) \
127 do_klass(PhantomReference_klass, java_lang_ref_PhantomReference, Pre ) \
128 do_klass(Finalizer_klass, java_lang_ref_Finalizer, Pre ) \
129 \
130 do_klass(Thread_klass, java_lang_Thread, Pre ) \
131 do_klass(ThreadGroup_klass, java_lang_ThreadGroup, Pre ) \
132 do_klass(Properties_klass, java_util_Properties, Pre ) \
133 do_klass(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject, Pre ) \
134 do_klass(reflect_Field_klass, java_lang_reflect_Field, Pre ) \
135 do_klass(reflect_Parameter_klass, java_lang_reflect_Parameter, Opt ) \
136 do_klass(reflect_Method_klass, java_lang_reflect_Method, Pre ) \
137 do_klass(reflect_Constructor_klass, java_lang_reflect_Constructor, Pre ) \
138 \
139 /* NOTE: needed too early in bootstrapping process to have checks based on JDK version */ \
140 /* Universe::is_gte_jdk14x_version() is not set up by this point. */ \
141 /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
142 do_klass(lambda_MagicLambdaImpl_klass, java_lang_invoke_MagicLambdaImpl, Opt ) \
143 do_klass(reflect_MagicAccessorImpl_klass, sun_reflect_MagicAccessorImpl, Opt ) \
144 do_klass(reflect_MethodAccessorImpl_klass, sun_reflect_MethodAccessorImpl, Opt_Only_JDK14NewRef) \
145 do_klass(reflect_ConstructorAccessorImpl_klass, sun_reflect_ConstructorAccessorImpl, Opt_Only_JDK14NewRef) \
146 do_klass(reflect_DelegatingClassLoader_klass, sun_reflect_DelegatingClassLoader, Opt ) \
147 do_klass(reflect_ConstantPool_klass, sun_reflect_ConstantPool, Opt_Only_JDK15 ) \
148 do_klass(reflect_UnsafeStaticFieldAccessorImpl_klass, sun_reflect_UnsafeStaticFieldAccessorImpl, Opt_Only_JDK15 ) \
149 do_klass(reflect_CallerSensitive_klass, sun_reflect_CallerSensitive, Opt ) \
150 \
151 /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \
152 do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle, Pre_JSR292 ) \
153 do_klass(MemberName_klass, java_lang_invoke_MemberName, Pre_JSR292 ) \
154 do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives, Pre_JSR292 ) \
155 do_klass(LambdaForm_klass, java_lang_invoke_LambdaForm, Opt ) \
156 do_klass(MethodType_klass, java_lang_invoke_MethodType, Pre_JSR292 ) \
157 do_klass(BootstrapMethodError_klass, java_lang_BootstrapMethodError, Pre_JSR292 ) \
158 do_klass(CallSite_klass, java_lang_invoke_CallSite, Pre_JSR292 ) \
159 do_klass(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite, Pre_JSR292 ) \
160 do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite, Pre_JSR292 ) \
161 do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite, Pre_JSR292 ) \
162 /* Note: MethodHandle must be first, and VolatileCallSite last in group */ \
163 \
164 do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \
165 do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \
166 \
167 /* It's NULL in non-1.4 JDKs. */ \
168 do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \
169 /* Universe::is_gte_jdk14x_version() is not set up by this point. */ \
613 // Wait on SystemDictionary_lock; unlocks lockObject before
614 // waiting; relocks lockObject with correct recursion count
615 // after waiting, but before reentering SystemDictionary_lock
616 // to preserve lock order semantics.
617 static void double_lock_wait(Handle lockObject, TRAPS);
618 static void define_instance_class(instanceKlassHandle k, TRAPS);
619 static instanceKlassHandle find_or_define_instance_class(Symbol* class_name,
620 Handle class_loader,
621 instanceKlassHandle k, TRAPS);
622 static instanceKlassHandle load_shared_class(Symbol* class_name,
623 Handle class_loader, TRAPS);
624 static instanceKlassHandle load_shared_class(instanceKlassHandle ik,
625 Handle class_loader, TRAPS);
626 static void clean_up_shared_class(instanceKlassHandle ik, Handle class_loader, TRAPS);
627 static instanceKlassHandle load_instance_class(Symbol* class_name, Handle class_loader, TRAPS);
628 static Handle compute_loader_lock_object(Handle class_loader, TRAPS);
629 static void check_loader_lock_contention(Handle loader_lock, TRAPS);
630 static bool is_parallelCapable(Handle class_loader);
631 static bool is_parallelDefine(Handle class_loader);
632
633 public:
634 static bool is_ext_class_loader(Handle class_loader);
635
636 private:
637 static Klass* find_shared_class(Symbol* class_name);
638
639 // Setup link to hierarchy
640 static void add_to_hierarchy(instanceKlassHandle k, TRAPS);
641
642 // We pass in the hashtable index so we can calculate it outside of
643 // the SystemDictionary_lock.
644
645 // Basic find on loaded classes
646 static Klass* find_class(int index, unsigned int hash,
647 Symbol* name, ClassLoaderData* loader_data);
648 static Klass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
649
650 // Basic find on classes in the midst of being loaded
651 static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
652
653 // Updating entry in dictionary
654 // Add a completely loaded class
655 static void add_klass(int index, Symbol* class_name,
656 ClassLoaderData* loader_data, KlassHandle obj);
657
658 // Add a placeholder for a class being loaded
659 static void add_placeholder(int index,
660 Symbol* class_name,
661 ClassLoaderData* loader_data);
|