src/share/vm/classfile/systemDictionary.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7198429 Sdiff src/share/vm/classfile

src/share/vm/classfile/systemDictionary.hpp

Print this page




  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);


src/share/vm/classfile/systemDictionary.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File