173 do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite, Pre ) \
174 do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite, Pre ) \
175 /* Note: MethodHandle must be first, and VolatileCallSite last in group */ \
176 \
177 do_klass(AssertionStatusDirectives_klass, java_lang_AssertionStatusDirectives, Pre ) \
178 do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \
179 do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \
180 do_klass(internal_Unsafe_klass, jdk_internal_misc_Unsafe, Pre ) \
181 do_klass(module_Modules_klass, jdk_internal_module_Modules, Pre ) \
182 \
183 /* support for CDS */ \
184 do_klass(ByteArrayInputStream_klass, java_io_ByteArrayInputStream, Pre ) \
185 do_klass(File_klass, java_io_File, Pre ) \
186 do_klass(URL_klass, java_net_URL, Pre ) \
187 do_klass(Jar_Manifest_klass, java_util_jar_Manifest, Pre ) \
188 do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass, jdk_internal_loader_ClassLoaders_AppClassLoader, Pre ) \
189 do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader, Pre ) \
190 do_klass(CodeSource_klass, java_security_CodeSource, Pre ) \
191 do_klass(ParseUtil_klass, sun_net_www_ParseUtil, Pre ) \
192 \
193 /* support for valhalla "shady" value type bytecode transformer */ \
194 do_klass(Valhalla_MVT1_0_klass, valhalla_shady_MVT1_0, MVTClasses ) \
195 \
196 do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \
197 \
198 /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
199 do_klass(nio_Buffer_klass, java_nio_Buffer, Opt ) \
200 \
201 /* Stack Walking */ \
202 do_klass(StackWalker_klass, java_lang_StackWalker, Opt ) \
203 do_klass(AbstractStackWalker_klass, java_lang_StackStreamFactory_AbstractStackWalker, Opt ) \
204 do_klass(StackFrameInfo_klass, java_lang_StackFrameInfo, Opt ) \
205 do_klass(LiveStackFrameInfo_klass, java_lang_LiveStackFrameInfo, Opt ) \
206 \
207 /* Preload boxing klasses */ \
208 do_klass(Boolean_klass, java_lang_Boolean, Pre ) \
209 do_klass(Character_klass, java_lang_Character, Pre ) \
210 do_klass(Float_klass, java_lang_Float, Pre ) \
211 do_klass(Double_klass, java_lang_Double, Pre ) \
212 do_klass(Byte_klass, java_lang_Byte, Pre ) \
213 do_klass(Short_klass, java_lang_Short, Pre ) \
214 do_klass(Integer_klass, java_lang_Integer, Pre ) \
215 do_klass(Long_klass, java_lang_Long, Pre ) \
216 \
217 do_klass(___Value_klass, java_lang____Value, ValhallaClasses ) \
218 \
219 /* Extensions */ \
220 WK_KLASSES_DO_EXT(do_klass) \
221 /* JVMCI classes. These are loaded on-demand. */ \
222 JVMCI_WK_KLASSES_DO(do_klass) \
223 \
224 /*end*/
225
226
227 class SystemDictionary : AllStatic {
228 friend class VMStructs;
229 friend class SystemDictionaryHandles;
230 friend class SharedClassUtil;
231
232 public:
233 enum WKID {
234 NO_WKID = 0,
235
236 #define WK_KLASS_ENUM(name, symbol, ignore_o) WK_KLASS_ENUM_NAME(name), WK_KLASS_ENUM_NAME(symbol) = WK_KLASS_ENUM_NAME(name),
237 WK_KLASSES_DO(WK_KLASS_ENUM)
650 // ProtectionDomain cache
651 static ProtectionDomainCacheTable* _pd_cache_table;
652
653 protected:
654 static void validate_protection_domain(InstanceKlass* klass,
655 Handle class_loader,
656 Handle protection_domain, TRAPS);
657
658 friend class VM_PopulateDumpSharedSpace;
659 friend class TraversePlaceholdersClosure;
660 static Dictionary* shared_dictionary() { return _shared_dictionary; }
661 static PlaceholderTable* placeholders() { return _placeholders; }
662 static LoaderConstraintTable* constraints() { return _loader_constraints; }
663 static ResolutionErrorTable* resolution_errors() { return _resolution_errors; }
664 static SymbolPropertyTable* invoke_method_table() { return _invoke_method_table; }
665
666 // Basic loading operations
667 static Klass* resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
668 static Klass* do_resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
669 static Klass* resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
670 static Klass* resolve_dvt_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
671 static InstanceKlass* handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS);
672 // Wait on SystemDictionary_lock; unlocks lockObject before
673 // waiting; relocks lockObject with correct recursion count
674 // after waiting, but before reentering SystemDictionary_lock
675 // to preserve lock order semantics.
676 static void double_lock_wait(Handle lockObject, TRAPS);
677 static void define_instance_class(InstanceKlass* k, TRAPS);
678 static InstanceKlass* find_or_define_instance_class(Symbol* class_name,
679 Handle class_loader,
680 InstanceKlass* k, TRAPS);
681 static bool is_shared_class_visible(Symbol* class_name, InstanceKlass* ik,
682 Handle class_loader, TRAPS);
683 static InstanceKlass* load_shared_class(InstanceKlass* ik,
684 Handle class_loader,
685 Handle protection_domain,
686 TRAPS);
687 static InstanceKlass* load_instance_class(Symbol* class_name, Handle class_loader, TRAPS);
688 static Handle compute_loader_lock_object(Handle class_loader, TRAPS);
689 static void check_loader_lock_contention(Handle loader_lock, TRAPS);
690 static bool is_parallelCapable(Handle class_loader);
|
173 do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite, Pre ) \
174 do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite, Pre ) \
175 /* Note: MethodHandle must be first, and VolatileCallSite last in group */ \
176 \
177 do_klass(AssertionStatusDirectives_klass, java_lang_AssertionStatusDirectives, Pre ) \
178 do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \
179 do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \
180 do_klass(internal_Unsafe_klass, jdk_internal_misc_Unsafe, Pre ) \
181 do_klass(module_Modules_klass, jdk_internal_module_Modules, Pre ) \
182 \
183 /* support for CDS */ \
184 do_klass(ByteArrayInputStream_klass, java_io_ByteArrayInputStream, Pre ) \
185 do_klass(File_klass, java_io_File, Pre ) \
186 do_klass(URL_klass, java_net_URL, Pre ) \
187 do_klass(Jar_Manifest_klass, java_util_jar_Manifest, Pre ) \
188 do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass, jdk_internal_loader_ClassLoaders_AppClassLoader, Pre ) \
189 do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader, Pre ) \
190 do_klass(CodeSource_klass, java_security_CodeSource, Pre ) \
191 do_klass(ParseUtil_klass, sun_net_www_ParseUtil, Pre ) \
192 \
193 \
194 do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \
195 \
196 /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
197 do_klass(nio_Buffer_klass, java_nio_Buffer, Opt ) \
198 \
199 /* Stack Walking */ \
200 do_klass(StackWalker_klass, java_lang_StackWalker, Opt ) \
201 do_klass(AbstractStackWalker_klass, java_lang_StackStreamFactory_AbstractStackWalker, Opt ) \
202 do_klass(StackFrameInfo_klass, java_lang_StackFrameInfo, Opt ) \
203 do_klass(LiveStackFrameInfo_klass, java_lang_LiveStackFrameInfo, Opt ) \
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 \
216 /* Extensions */ \
217 WK_KLASSES_DO_EXT(do_klass) \
218 /* JVMCI classes. These are loaded on-demand. */ \
219 JVMCI_WK_KLASSES_DO(do_klass) \
220 \
221 /*end*/
222
223
224 class SystemDictionary : AllStatic {
225 friend class VMStructs;
226 friend class SystemDictionaryHandles;
227 friend class SharedClassUtil;
228
229 public:
230 enum WKID {
231 NO_WKID = 0,
232
233 #define WK_KLASS_ENUM(name, symbol, ignore_o) WK_KLASS_ENUM_NAME(name), WK_KLASS_ENUM_NAME(symbol) = WK_KLASS_ENUM_NAME(name),
234 WK_KLASSES_DO(WK_KLASS_ENUM)
647 // ProtectionDomain cache
648 static ProtectionDomainCacheTable* _pd_cache_table;
649
650 protected:
651 static void validate_protection_domain(InstanceKlass* klass,
652 Handle class_loader,
653 Handle protection_domain, TRAPS);
654
655 friend class VM_PopulateDumpSharedSpace;
656 friend class TraversePlaceholdersClosure;
657 static Dictionary* shared_dictionary() { return _shared_dictionary; }
658 static PlaceholderTable* placeholders() { return _placeholders; }
659 static LoaderConstraintTable* constraints() { return _loader_constraints; }
660 static ResolutionErrorTable* resolution_errors() { return _resolution_errors; }
661 static SymbolPropertyTable* invoke_method_table() { return _invoke_method_table; }
662
663 // Basic loading operations
664 static Klass* resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
665 static Klass* do_resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
666 static Klass* resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
667 static InstanceKlass* handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS);
668 // Wait on SystemDictionary_lock; unlocks lockObject before
669 // waiting; relocks lockObject with correct recursion count
670 // after waiting, but before reentering SystemDictionary_lock
671 // to preserve lock order semantics.
672 static void double_lock_wait(Handle lockObject, TRAPS);
673 static void define_instance_class(InstanceKlass* k, TRAPS);
674 static InstanceKlass* find_or_define_instance_class(Symbol* class_name,
675 Handle class_loader,
676 InstanceKlass* k, TRAPS);
677 static bool is_shared_class_visible(Symbol* class_name, InstanceKlass* ik,
678 Handle class_loader, TRAPS);
679 static InstanceKlass* load_shared_class(InstanceKlass* ik,
680 Handle class_loader,
681 Handle protection_domain,
682 TRAPS);
683 static InstanceKlass* load_instance_class(Symbol* class_name, Handle class_loader, TRAPS);
684 static Handle compute_loader_lock_object(Handle class_loader, TRAPS);
685 static void check_loader_lock_contention(Handle loader_lock, TRAPS);
686 static bool is_parallelCapable(Handle class_loader);
|