< prev index next >

src/hotspot/share/classfile/systemDictionary.hpp

Print this page


  81 class ResolutionErrorTable;
  82 class SymbolPropertyTable;
  83 class ProtectionDomainCacheTable;
  84 class ProtectionDomainCacheEntry;
  85 class GCTimer;
  86 class OopStorage;
  87 
  88 // Certain classes are preloaded, such as java.lang.Object and java.lang.String.
  89 // They are all "well-known", in the sense that no class loader is allowed
  90 // to provide a different definition.
  91 //
  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),
  97 // a vmSymbol name (like java_lang_Object), and a flag word
  98 // that makes some minor distinctions, like whether the klass
  99 // is preloaded, optional, release-specific, etc.
 100 // The order of these definitions is significant; it is the order in which
 101 // preloading is actually performed by initialize_preloaded_classes.
 102 
 103 #define WK_KLASSES_DO(do_klass)                                                                                          \
 104   /* well-known classes */                                                                                               \
 105   do_klass(Object_klass,                                java_lang_Object,                          Pre                 ) \
 106   do_klass(String_klass,                                java_lang_String,                          Pre                 ) \
 107   do_klass(Class_klass,                                 java_lang_Class,                           Pre                 ) \
 108   do_klass(Cloneable_klass,                             java_lang_Cloneable,                       Pre                 ) \
 109   do_klass(ClassLoader_klass,                           java_lang_ClassLoader,                     Pre                 ) \
 110   do_klass(Serializable_klass,                          java_io_Serializable,                      Pre                 ) \
 111   do_klass(System_klass,                                java_lang_System,                          Pre                 ) \
 112   do_klass(Throwable_klass,                             java_lang_Throwable,                       Pre                 ) \
 113   do_klass(Error_klass,                                 java_lang_Error,                           Pre                 ) \
 114   do_klass(ThreadDeath_klass,                           java_lang_ThreadDeath,                     Pre                 ) \
 115   do_klass(Exception_klass,                             java_lang_Exception,                       Pre                 ) \
 116   do_klass(RuntimeException_klass,                      java_lang_RuntimeException,                Pre                 ) \
 117   do_klass(SecurityManager_klass,                       java_lang_SecurityManager,                 Pre                 ) \
 118   do_klass(ProtectionDomain_klass,                      java_security_ProtectionDomain,            Pre                 ) \
 119   do_klass(AccessControlContext_klass,                  java_security_AccessControlContext,        Pre                 ) \
 120   do_klass(SecureClassLoader_klass,                     java_security_SecureClassLoader,           Pre                 ) \
 121   do_klass(ClassNotFoundException_klass,                java_lang_ClassNotFoundException,          Pre                 ) \


 400   // Needed by evolution and breakpoint code
 401   static inline void notice_modification()        { assert_locked_or_safepoint(Compile_lock); ++_number_of_modifications;      }
 402 
 403   // Verification
 404   static void verify();
 405 
 406   // Initialization
 407   static void initialize(TRAPS);
 408 
 409   // Checked fast access to commonly used classes - mostly preloaded
 410   static InstanceKlass* check_klass(InstanceKlass* k) {
 411     assert(k != NULL, "klass not loaded");
 412     return k;
 413   }
 414 
 415   static InstanceKlass* check_klass_Pre(InstanceKlass* k) { return check_klass(k); }
 416   static InstanceKlass* check_klass_Opt(InstanceKlass* k) { return k; }
 417 
 418   JVMCI_ONLY(static InstanceKlass* check_klass_Jvmci(InstanceKlass* k) { return k; })
 419 
 420   static bool initialize_wk_klass(WKID id, int init_opt, TRAPS);
 421   static void initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
 422   static void initialize_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
 423     int limit = (int)end_id + 1;
 424     initialize_wk_klasses_until((WKID) limit, start_id, THREAD);
 425   }
 426 
 427 public:
 428   #define WK_KLASS_DECLARE(name, symbol, option) \
 429     static InstanceKlass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \
 430     static InstanceKlass** name##_addr() {                                                                       \
 431       return &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)];           \
 432     }
 433   WK_KLASSES_DO(WK_KLASS_DECLARE);
 434   #undef WK_KLASS_DECLARE
 435 
 436   static InstanceKlass* well_known_klass(WKID id) {
 437     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
 438     return _well_known_klasses[id];
 439   }
 440 
 441   static InstanceKlass** well_known_klass_addr(WKID id) {
 442     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
 443     return &_well_known_klasses[id];
 444   }


 691   static InstanceKlass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
 692 
 693   // Basic find on classes in the midst of being loaded
 694   static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
 695 
 696   // Add a placeholder for a class being loaded
 697   static void add_placeholder(int index,
 698                               Symbol* class_name,
 699                               ClassLoaderData* loader_data);
 700   static void remove_placeholder(int index,
 701                                  Symbol* class_name,
 702                                  ClassLoaderData* loader_data);
 703 
 704   // Performs cleanups after resolve_super_or_fail. This typically needs
 705   // to be called on failure.
 706   // Won't throw, but can block.
 707   static void resolution_cleanups(Symbol* class_name,
 708                                   ClassLoaderData* loader_data,
 709                                   TRAPS);
 710 
 711   // Initialization
 712   static void initialize_preloaded_classes(TRAPS);
 713 
 714   // Class loader constraints
 715   static void check_constraints(unsigned int hash,
 716                                 InstanceKlass* k, Handle loader,
 717                                 bool defining, TRAPS);
 718   static void update_dictionary(unsigned int d_hash,
 719                                 int p_index, unsigned int p_hash,
 720                                 InstanceKlass* k, Handle loader,
 721                                 TRAPS);
 722 
 723   // Variables holding commonly used klasses (preloaded)
 724   static InstanceKlass* _well_known_klasses[];
 725 
 726   // table of box klasses (int_klass, etc.)
 727   static InstanceKlass* _box_klasses[T_VOID+1];
 728 
 729 private:
 730   static oop  _java_system_loader;
 731   static oop  _java_platform_loader;
 732 


  81 class ResolutionErrorTable;
  82 class SymbolPropertyTable;
  83 class ProtectionDomainCacheTable;
  84 class ProtectionDomainCacheEntry;
  85 class GCTimer;
  86 class OopStorage;
  87 
  88 // Certain classes are preloaded, such as java.lang.Object and java.lang.String.
  89 // They are all "well-known", in the sense that no class loader is allowed
  90 // to provide a different definition.
  91 //
  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),
  97 // a vmSymbol name (like java_lang_Object), and a flag word
  98 // that makes some minor distinctions, like whether the klass
  99 // is preloaded, optional, release-specific, etc.
 100 // The order of these definitions is significant; it is the order in which
 101 // preloading is actually performed by resolve_preloaded_classes.
 102 
 103 #define WK_KLASSES_DO(do_klass)                                                                                          \
 104   /* well-known classes */                                                                                               \
 105   do_klass(Object_klass,                                java_lang_Object,                          Pre                 ) \
 106   do_klass(String_klass,                                java_lang_String,                          Pre                 ) \
 107   do_klass(Class_klass,                                 java_lang_Class,                           Pre                 ) \
 108   do_klass(Cloneable_klass,                             java_lang_Cloneable,                       Pre                 ) \
 109   do_klass(ClassLoader_klass,                           java_lang_ClassLoader,                     Pre                 ) \
 110   do_klass(Serializable_klass,                          java_io_Serializable,                      Pre                 ) \
 111   do_klass(System_klass,                                java_lang_System,                          Pre                 ) \
 112   do_klass(Throwable_klass,                             java_lang_Throwable,                       Pre                 ) \
 113   do_klass(Error_klass,                                 java_lang_Error,                           Pre                 ) \
 114   do_klass(ThreadDeath_klass,                           java_lang_ThreadDeath,                     Pre                 ) \
 115   do_klass(Exception_klass,                             java_lang_Exception,                       Pre                 ) \
 116   do_klass(RuntimeException_klass,                      java_lang_RuntimeException,                Pre                 ) \
 117   do_klass(SecurityManager_klass,                       java_lang_SecurityManager,                 Pre                 ) \
 118   do_klass(ProtectionDomain_klass,                      java_security_ProtectionDomain,            Pre                 ) \
 119   do_klass(AccessControlContext_klass,                  java_security_AccessControlContext,        Pre                 ) \
 120   do_klass(SecureClassLoader_klass,                     java_security_SecureClassLoader,           Pre                 ) \
 121   do_klass(ClassNotFoundException_klass,                java_lang_ClassNotFoundException,          Pre                 ) \


 400   // Needed by evolution and breakpoint code
 401   static inline void notice_modification()        { assert_locked_or_safepoint(Compile_lock); ++_number_of_modifications;      }
 402 
 403   // Verification
 404   static void verify();
 405 
 406   // Initialization
 407   static void initialize(TRAPS);
 408 
 409   // Checked fast access to commonly used classes - mostly preloaded
 410   static InstanceKlass* check_klass(InstanceKlass* k) {
 411     assert(k != NULL, "klass not loaded");
 412     return k;
 413   }
 414 
 415   static InstanceKlass* check_klass_Pre(InstanceKlass* k) { return check_klass(k); }
 416   static InstanceKlass* check_klass_Opt(InstanceKlass* k) { return k; }
 417 
 418   JVMCI_ONLY(static InstanceKlass* check_klass_Jvmci(InstanceKlass* k) { return k; })
 419 
 420   static bool resolve_wk_klass(WKID id, int init_opt, TRAPS);
 421   static void resolve_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
 422   static void resolve_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
 423     int limit = (int)end_id + 1;
 424     resolve_wk_klasses_until((WKID) limit, start_id, THREAD);
 425   }
 426 
 427 public:
 428   #define WK_KLASS_DECLARE(name, symbol, option) \
 429     static InstanceKlass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \
 430     static InstanceKlass** name##_addr() {                                                                       \
 431       return &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)];           \
 432     }
 433   WK_KLASSES_DO(WK_KLASS_DECLARE);
 434   #undef WK_KLASS_DECLARE
 435 
 436   static InstanceKlass* well_known_klass(WKID id) {
 437     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
 438     return _well_known_klasses[id];
 439   }
 440 
 441   static InstanceKlass** well_known_klass_addr(WKID id) {
 442     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
 443     return &_well_known_klasses[id];
 444   }


 691   static InstanceKlass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
 692 
 693   // Basic find on classes in the midst of being loaded
 694   static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
 695 
 696   // Add a placeholder for a class being loaded
 697   static void add_placeholder(int index,
 698                               Symbol* class_name,
 699                               ClassLoaderData* loader_data);
 700   static void remove_placeholder(int index,
 701                                  Symbol* class_name,
 702                                  ClassLoaderData* loader_data);
 703 
 704   // Performs cleanups after resolve_super_or_fail. This typically needs
 705   // to be called on failure.
 706   // Won't throw, but can block.
 707   static void resolution_cleanups(Symbol* class_name,
 708                                   ClassLoaderData* loader_data,
 709                                   TRAPS);
 710 
 711   // Resolve preloaded classes so they can be used like SystemDictionary::String_klass()
 712   static void resolve_preloaded_classes(TRAPS);
 713 
 714   // Class loader constraints
 715   static void check_constraints(unsigned int hash,
 716                                 InstanceKlass* k, Handle loader,
 717                                 bool defining, TRAPS);
 718   static void update_dictionary(unsigned int d_hash,
 719                                 int p_index, unsigned int p_hash,
 720                                 InstanceKlass* k, Handle loader,
 721                                 TRAPS);
 722 
 723   // Variables holding commonly used klasses (preloaded)
 724   static InstanceKlass* _well_known_klasses[];
 725 
 726   // table of box klasses (int_klass, etc.)
 727   static InstanceKlass* _box_klasses[T_VOID+1];
 728 
 729 private:
 730   static oop  _java_system_loader;
 731   static oop  _java_platform_loader;
 732 
< prev index next >