< prev index next >

src/hotspot/share/classfile/systemDictionary.hpp

Print this page




 182   /* support for CDS */                                                                                                  \
 183   do_klass(ByteArrayInputStream_klass,                  java_io_ByteArrayInputStream,              Pre                 ) \
 184   do_klass(URL_klass,                                   java_net_URL,                              Pre                 ) \
 185   do_klass(Jar_Manifest_klass,                          java_util_jar_Manifest,                    Pre                 ) \
 186   do_klass(jdk_internal_loader_ClassLoaders_klass,      jdk_internal_loader_ClassLoaders,          Pre                 ) \
 187   do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass,      jdk_internal_loader_ClassLoaders_AppClassLoader,       Pre ) \
 188   do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader,  Pre ) \
 189   do_klass(CodeSource_klass,                            java_security_CodeSource,                  Pre                 ) \
 190                                                                                                                          \
 191   do_klass(StackTraceElement_klass,                     java_lang_StackTraceElement,               Opt                 ) \
 192                                                                                                                          \
 193   /* It's okay if this turns out to be NULL in non-1.4 JDKs. */                                                          \
 194   do_klass(nio_Buffer_klass,                            java_nio_Buffer,                           Opt                 ) \
 195                                                                                                                          \
 196   /* Stack Walking */                                                                                                    \
 197   do_klass(StackWalker_klass,                           java_lang_StackWalker,                     Opt                 ) \
 198   do_klass(AbstractStackWalker_klass,                   java_lang_StackStreamFactory_AbstractStackWalker, Opt          ) \
 199   do_klass(StackFrameInfo_klass,                        java_lang_StackFrameInfo,                  Opt                 ) \
 200   do_klass(LiveStackFrameInfo_klass,                    java_lang_LiveStackFrameInfo,              Opt                 ) \
 201                                                                                                                          \



 202   /* Preload boxing klasses */                                                                                           \
 203   do_klass(Boolean_klass,                               java_lang_Boolean,                         Pre                 ) \
 204   do_klass(Character_klass,                             java_lang_Character,                       Pre                 ) \
 205   do_klass(Float_klass,                                 java_lang_Float,                           Pre                 ) \
 206   do_klass(Double_klass,                                java_lang_Double,                          Pre                 ) \
 207   do_klass(Byte_klass,                                  java_lang_Byte,                            Pre                 ) \
 208   do_klass(Short_klass,                                 java_lang_Short,                           Pre                 ) \
 209   do_klass(Integer_klass,                               java_lang_Integer,                         Pre                 ) \
 210   do_klass(Long_klass,                                  java_lang_Long,                            Pre                 ) \
 211                                                                                                                          \
 212   /* JVMCI classes. These are loaded on-demand. */                                                                       \
 213   JVMCI_WK_KLASSES_DO(do_klass)                                                                                          \
 214                                                                                                                          \
 215   /*end*/
 216 
 217 
 218 class SystemDictionary : AllStatic {
 219   friend class VMStructs;
 220   friend class SystemDictionaryHandles;
 221 


 432   static InstanceKlass* well_known_klass(WKID id) {
 433     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
 434     return _well_known_klasses[id];
 435   }
 436 
 437   static InstanceKlass** well_known_klass_addr(WKID id) {
 438     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
 439     return &_well_known_klasses[id];
 440   }
 441   static void well_known_klasses_do(MetaspaceClosure* it);
 442 
 443   // Local definition for direct access to the private array:
 444   #define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]
 445 
 446   static InstanceKlass* box_klass(BasicType t) {
 447     assert((uint)t < T_VOID+1, "range check");
 448     return check_klass(_box_klasses[t]);
 449   }
 450   static BasicType box_klass_type(Klass* k);  // inverse of box_klass
 451 
 452   // methods returning lazily loaded klasses
 453   // The corresponding method to load the class must be called before calling them.
 454   static InstanceKlass* abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); }
 455 
 456   static void load_abstract_ownable_synchronizer_klass(TRAPS);
 457 
 458 protected:
 459   // Returns the class loader data to be used when looking up/updating the
 460   // system dictionary.
 461   static ClassLoaderData *class_loader_data(Handle class_loader) {
 462     return ClassLoaderData::class_loader_data(class_loader());
 463   }
 464 
 465 public:
 466   // Tells whether ClassLoader.checkPackageAccess is present
 467   static bool has_checkPackageAccess()      { return _has_checkPackageAccess; }
 468 
 469   static bool Parameter_klass_loaded()      { return WK_KLASS(reflect_Parameter_klass) != NULL; }
 470   static bool Class_klass_loaded()          { return WK_KLASS(Class_klass) != NULL; }
 471   static bool Cloneable_klass_loaded()      { return WK_KLASS(Cloneable_klass) != NULL; }
 472   static bool Object_klass_loaded()         { return WK_KLASS(Object_klass) != NULL; }
 473   static bool ClassLoader_klass_loaded()    { return WK_KLASS(ClassLoader_klass) != NULL; }
 474 
 475   // Returns java system loader
 476   static oop java_system_loader();
 477 


 711   // to be called on failure.
 712   // Won't throw, but can block.
 713   static void resolution_cleanups(Symbol* class_name,
 714                                   ClassLoaderData* loader_data,
 715                                   TRAPS);
 716 
 717   // Initialization
 718   static void initialize_preloaded_classes(TRAPS);
 719 
 720   // Class loader constraints
 721   static void check_constraints(unsigned int hash,
 722                                 InstanceKlass* k, Handle loader,
 723                                 bool defining, TRAPS);
 724   static void update_dictionary(unsigned int d_hash,
 725                                 int p_index, unsigned int p_hash,
 726                                 InstanceKlass* k, Handle loader,
 727                                 TRAPS);
 728 
 729   // Variables holding commonly used klasses (preloaded)
 730   static InstanceKlass* _well_known_klasses[];
 731 
 732   // Lazily loaded klasses
 733   static InstanceKlass* volatile _abstract_ownable_synchronizer_klass;
 734 
 735   // table of box klasses (int_klass, etc.)
 736   static InstanceKlass* _box_klasses[T_VOID+1];
 737 
 738 private:
 739   static oop  _java_system_loader;
 740   static oop  _java_platform_loader;
 741 
 742   static bool _has_checkPackageAccess;
 743 };
 744 
 745 #endif // SHARE_VM_CLASSFILE_SYSTEMDICTIONARY_HPP


 182   /* support for CDS */                                                                                                  \
 183   do_klass(ByteArrayInputStream_klass,                  java_io_ByteArrayInputStream,              Pre                 ) \
 184   do_klass(URL_klass,                                   java_net_URL,                              Pre                 ) \
 185   do_klass(Jar_Manifest_klass,                          java_util_jar_Manifest,                    Pre                 ) \
 186   do_klass(jdk_internal_loader_ClassLoaders_klass,      jdk_internal_loader_ClassLoaders,          Pre                 ) \
 187   do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass,      jdk_internal_loader_ClassLoaders_AppClassLoader,       Pre ) \
 188   do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader,  Pre ) \
 189   do_klass(CodeSource_klass,                            java_security_CodeSource,                  Pre                 ) \
 190                                                                                                                          \
 191   do_klass(StackTraceElement_klass,                     java_lang_StackTraceElement,               Opt                 ) \
 192                                                                                                                          \
 193   /* It's okay if this turns out to be NULL in non-1.4 JDKs. */                                                          \
 194   do_klass(nio_Buffer_klass,                            java_nio_Buffer,                           Opt                 ) \
 195                                                                                                                          \
 196   /* Stack Walking */                                                                                                    \
 197   do_klass(StackWalker_klass,                           java_lang_StackWalker,                     Opt                 ) \
 198   do_klass(AbstractStackWalker_klass,                   java_lang_StackStreamFactory_AbstractStackWalker, Opt          ) \
 199   do_klass(StackFrameInfo_klass,                        java_lang_StackFrameInfo,                  Opt                 ) \
 200   do_klass(LiveStackFrameInfo_klass,                    java_lang_LiveStackFrameInfo,              Opt                 ) \
 201                                                                                                                          \
 202   /* support for stack dump lock analysis */                                                                             \
 203   do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer, Pre ) \
 204                                                                                                                          \
 205   /* Preload boxing klasses */                                                                                           \
 206   do_klass(Boolean_klass,                               java_lang_Boolean,                         Pre                 ) \
 207   do_klass(Character_klass,                             java_lang_Character,                       Pre                 ) \
 208   do_klass(Float_klass,                                 java_lang_Float,                           Pre                 ) \
 209   do_klass(Double_klass,                                java_lang_Double,                          Pre                 ) \
 210   do_klass(Byte_klass,                                  java_lang_Byte,                            Pre                 ) \
 211   do_klass(Short_klass,                                 java_lang_Short,                           Pre                 ) \
 212   do_klass(Integer_klass,                               java_lang_Integer,                         Pre                 ) \
 213   do_klass(Long_klass,                                  java_lang_Long,                            Pre                 ) \
 214                                                                                                                          \
 215   /* JVMCI classes. These are loaded on-demand. */                                                                       \
 216   JVMCI_WK_KLASSES_DO(do_klass)                                                                                          \
 217                                                                                                                          \
 218   /*end*/
 219 
 220 
 221 class SystemDictionary : AllStatic {
 222   friend class VMStructs;
 223   friend class SystemDictionaryHandles;
 224 


 435   static InstanceKlass* well_known_klass(WKID id) {
 436     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
 437     return _well_known_klasses[id];
 438   }
 439 
 440   static InstanceKlass** well_known_klass_addr(WKID id) {
 441     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
 442     return &_well_known_klasses[id];
 443   }
 444   static void well_known_klasses_do(MetaspaceClosure* it);
 445 
 446   // Local definition for direct access to the private array:
 447   #define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]
 448 
 449   static InstanceKlass* box_klass(BasicType t) {
 450     assert((uint)t < T_VOID+1, "range check");
 451     return check_klass(_box_klasses[t]);
 452   }
 453   static BasicType box_klass_type(Klass* k);  // inverse of box_klass
 454 






 455 protected:
 456   // Returns the class loader data to be used when looking up/updating the
 457   // system dictionary.
 458   static ClassLoaderData *class_loader_data(Handle class_loader) {
 459     return ClassLoaderData::class_loader_data(class_loader());
 460   }
 461 
 462 public:
 463   // Tells whether ClassLoader.checkPackageAccess is present
 464   static bool has_checkPackageAccess()      { return _has_checkPackageAccess; }
 465 
 466   static bool Parameter_klass_loaded()      { return WK_KLASS(reflect_Parameter_klass) != NULL; }
 467   static bool Class_klass_loaded()          { return WK_KLASS(Class_klass) != NULL; }
 468   static bool Cloneable_klass_loaded()      { return WK_KLASS(Cloneable_klass) != NULL; }
 469   static bool Object_klass_loaded()         { return WK_KLASS(Object_klass) != NULL; }
 470   static bool ClassLoader_klass_loaded()    { return WK_KLASS(ClassLoader_klass) != NULL; }
 471 
 472   // Returns java system loader
 473   static oop java_system_loader();
 474 


 708   // to be called on failure.
 709   // Won't throw, but can block.
 710   static void resolution_cleanups(Symbol* class_name,
 711                                   ClassLoaderData* loader_data,
 712                                   TRAPS);
 713 
 714   // Initialization
 715   static void initialize_preloaded_classes(TRAPS);
 716 
 717   // Class loader constraints
 718   static void check_constraints(unsigned int hash,
 719                                 InstanceKlass* k, Handle loader,
 720                                 bool defining, TRAPS);
 721   static void update_dictionary(unsigned int d_hash,
 722                                 int p_index, unsigned int p_hash,
 723                                 InstanceKlass* k, Handle loader,
 724                                 TRAPS);
 725 
 726   // Variables holding commonly used klasses (preloaded)
 727   static InstanceKlass* _well_known_klasses[];



 728 
 729   // table of box klasses (int_klass, etc.)
 730   static InstanceKlass* _box_klasses[T_VOID+1];
 731 
 732 private:
 733   static oop  _java_system_loader;
 734   static oop  _java_platform_loader;
 735 
 736   static bool _has_checkPackageAccess;
 737 };
 738 
 739 #endif // SHARE_VM_CLASSFILE_SYSTEMDICTIONARY_HPP
< prev index next >