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 |