src/hotspot/share/classfile/systemDictionary.hpp
changeset 52319 625f6c742392
parent 52195 f08c1d7a5c53
child 52335 6507eeb6f047
equal deleted inserted replaced
52318:124af9276e44 52319:625f6c742392
    83 class ProtectionDomainCacheTable;
    83 class ProtectionDomainCacheTable;
    84 class ProtectionDomainCacheEntry;
    84 class ProtectionDomainCacheEntry;
    85 class GCTimer;
    85 class GCTimer;
    86 class OopStorage;
    86 class OopStorage;
    87 
    87 
    88 // Certain classes are preloaded, such as java.lang.Object and java.lang.String.
    88 #define WK_KLASS_ENUM_NAME(kname)    kname##_knum
    89 // They are all "well-known", in the sense that no class loader is allowed
    89 
       
    90 // Certain classes, such as java.lang.Object and java.lang.String,
       
    91 // are "well-known", in the sense that no class loader is allowed
    90 // to provide a different definition.
    92 // to provide a different definition.
    91 //
    93 //
    92 // These klasses must all have names defined in vmSymbols.
       
    93 
       
    94 #define WK_KLASS_ENUM_NAME(kname)    kname##_knum
       
    95 
       
    96 // Each well-known class has a short klass name (like object_klass),
    94 // Each well-known class has a short klass name (like object_klass),
    97 // and a vmSymbol name (like java_lang_Object).
    95 // and a vmSymbol name (like java_lang_Object).
    98 // The order of these definitions is significant; it is the order in which
    96 //
    99 // preloading is actually performed by resolve_preloaded_classes.
    97 // The order of these definitions is significant: the classes are
   100 
    98 // resolved during early VM start-up by resolve_well_known_classes
       
    99 // in this order. Changing the order may require careful restructuring
       
   100 // of the VM start-up sequence.
       
   101 //
   101 #define WK_KLASSES_DO(do_klass)                                                                                 \
   102 #define WK_KLASSES_DO(do_klass)                                                                                 \
   102   /* well-known classes */                                                                                      \
   103   /* well-known classes */                                                                                      \
   103   do_klass(Object_klass,                                java_lang_Object                                      ) \
   104   do_klass(Object_klass,                                java_lang_Object                                      ) \
   104   do_klass(String_klass,                                java_lang_String                                      ) \
   105   do_klass(String_klass,                                java_lang_String                                      ) \
   105   do_klass(Class_klass,                                 java_lang_Class                                       ) \
   106   do_klass(Class_klass,                                 java_lang_Class                                       ) \
   125   do_klass(OutOfMemoryError_klass,                      java_lang_OutOfMemoryError                            ) \
   126   do_klass(OutOfMemoryError_klass,                      java_lang_OutOfMemoryError                            ) \
   126   do_klass(StackOverflowError_klass,                    java_lang_StackOverflowError                          ) \
   127   do_klass(StackOverflowError_klass,                    java_lang_StackOverflowError                          ) \
   127   do_klass(IllegalMonitorStateException_klass,          java_lang_IllegalMonitorStateException                ) \
   128   do_klass(IllegalMonitorStateException_klass,          java_lang_IllegalMonitorStateException                ) \
   128   do_klass(Reference_klass,                             java_lang_ref_Reference                               ) \
   129   do_klass(Reference_klass,                             java_lang_ref_Reference                               ) \
   129                                                                                                                 \
   130                                                                                                                 \
   130   /* Preload ref klasses and set reference types */                                                             \
   131   /* ref klasses and set reference types */                                                                     \
   131   do_klass(SoftReference_klass,                         java_lang_ref_SoftReference                           ) \
   132   do_klass(SoftReference_klass,                         java_lang_ref_SoftReference                           ) \
   132   do_klass(WeakReference_klass,                         java_lang_ref_WeakReference                           ) \
   133   do_klass(WeakReference_klass,                         java_lang_ref_WeakReference                           ) \
   133   do_klass(FinalReference_klass,                        java_lang_ref_FinalReference                          ) \
   134   do_klass(FinalReference_klass,                        java_lang_ref_FinalReference                          ) \
   134   do_klass(PhantomReference_klass,                      java_lang_ref_PhantomReference                        ) \
   135   do_klass(PhantomReference_klass,                      java_lang_ref_PhantomReference                        ) \
   135   do_klass(Finalizer_klass,                             java_lang_ref_Finalizer                               ) \
   136   do_klass(Finalizer_klass,                             java_lang_ref_Finalizer                               ) \
   198   do_klass(LiveStackFrameInfo_klass,                    java_lang_LiveStackFrameInfo                          ) \
   199   do_klass(LiveStackFrameInfo_klass,                    java_lang_LiveStackFrameInfo                          ) \
   199                                                                                                                 \
   200                                                                                                                 \
   200   /* support for stack dump lock analysis */                                                                    \
   201   /* support for stack dump lock analysis */                                                                    \
   201   do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer) \
   202   do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer) \
   202                                                                                                                 \
   203                                                                                                                 \
   203   /* Preload boxing klasses */                                                                                  \
   204   /* boxing klasses */                                                                                          \
   204   do_klass(Boolean_klass,                               java_lang_Boolean                                     ) \
   205   do_klass(Boolean_klass,                               java_lang_Boolean                                     ) \
   205   do_klass(Character_klass,                             java_lang_Character                                   ) \
   206   do_klass(Character_klass,                             java_lang_Character                                   ) \
   206   do_klass(Float_klass,                                 java_lang_Float                                       ) \
   207   do_klass(Float_klass,                                 java_lang_Float                                       ) \
   207   do_klass(Double_klass,                                java_lang_Double                                      ) \
   208   do_klass(Double_klass,                                java_lang_Double                                      ) \
   208   do_klass(Byte_klass,                                  java_lang_Byte                                        ) \
   209   do_klass(Byte_klass,                                  java_lang_Byte                                        ) \
   389   static void verify();
   390   static void verify();
   390 
   391 
   391   // Initialization
   392   // Initialization
   392   static void initialize(TRAPS);
   393   static void initialize(TRAPS);
   393 
   394 
   394   // Checked fast access to commonly used classes - mostly preloaded
   395   // Checked fast access to the well-known classes -- so that you don't try to use them
       
   396   // before they are resolved.
   395   static InstanceKlass* check_klass(InstanceKlass* k) {
   397   static InstanceKlass* check_klass(InstanceKlass* k) {
   396     assert(k != NULL, "klass not loaded");
   398     assert(k != NULL, "klass not loaded");
   397     return k;
   399     return k;
   398   }
   400   }
   399 
   401 
   433   static InstanceKlass* box_klass(BasicType t) {
   435   static InstanceKlass* box_klass(BasicType t) {
   434     assert((uint)t < T_VOID+1, "range check");
   436     assert((uint)t < T_VOID+1, "range check");
   435     return check_klass(_box_klasses[t]);
   437     return check_klass(_box_klasses[t]);
   436   }
   438   }
   437   static BasicType box_klass_type(Klass* k);  // inverse of box_klass
   439   static BasicType box_klass_type(Klass* k);  // inverse of box_klass
       
   440 #ifdef ASSERT
       
   441   static bool is_well_known_klass(Klass* k) {
       
   442     return is_well_known_klass(k->name());
       
   443   }
       
   444   static bool is_well_known_klass(Symbol* class_name);
       
   445 #endif
   438 
   446 
   439 protected:
   447 protected:
   440   // Returns the class loader data to be used when looking up/updating the
   448   // Returns the class loader data to be used when looking up/updating the
   441   // system dictionary.
   449   // system dictionary.
   442   static ClassLoaderData *class_loader_data(Handle class_loader) {
   450   static ClassLoaderData *class_loader_data(Handle class_loader) {
   693   // Won't throw, but can block.
   701   // Won't throw, but can block.
   694   static void resolution_cleanups(Symbol* class_name,
   702   static void resolution_cleanups(Symbol* class_name,
   695                                   ClassLoaderData* loader_data,
   703                                   ClassLoaderData* loader_data,
   696                                   TRAPS);
   704                                   TRAPS);
   697 
   705 
   698   // Resolve preloaded classes so they can be used like SystemDictionary::String_klass()
   706   // Resolve well-known classes so they can be used like SystemDictionary::String_klass()
   699   static void resolve_preloaded_classes(TRAPS);
   707   static void resolve_well_known_classes(TRAPS);
   700 
   708 
   701   // Class loader constraints
   709   // Class loader constraints
   702   static void check_constraints(unsigned int hash,
   710   static void check_constraints(unsigned int hash,
   703                                 InstanceKlass* k, Handle loader,
   711                                 InstanceKlass* k, Handle loader,
   704                                 bool defining, TRAPS);
   712                                 bool defining, TRAPS);
   705   static void update_dictionary(unsigned int d_hash,
   713   static void update_dictionary(unsigned int d_hash,
   706                                 int p_index, unsigned int p_hash,
   714                                 int p_index, unsigned int p_hash,
   707                                 InstanceKlass* k, Handle loader,
   715                                 InstanceKlass* k, Handle loader,
   708                                 TRAPS);
   716                                 TRAPS);
   709 
   717 
   710   // Variables holding commonly used klasses (preloaded)
       
   711   static InstanceKlass* _well_known_klasses[];
   718   static InstanceKlass* _well_known_klasses[];
   712 
   719 
   713   // table of box klasses (int_klass, etc.)
   720   // table of box klasses (int_klass, etc.)
   714   static InstanceKlass* _box_klasses[T_VOID+1];
   721   static InstanceKlass* _box_klasses[T_VOID+1];
   715 
   722