68 // - entries must be fully formed before they are available to concurrent
69 // readers (we must ensure write ordering)
70 //
71 // Note that placeholders are deleted at any time, as they are removed
72 // when a class is completely loaded. Therefore, readers as well as writers
73 // of placeholders must hold the SystemDictionary_lock.
74 //
75
76 class ClassFileStream;
77 class Dictionary;
78 class PlaceholderTable;
79 class LoaderConstraintTable;
80 template <MEMFLAGS F> class HashtableBucket;
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 // and a vmSymbol name (like java_lang_Object).
98 // The order of these definitions is significant; it is the order in which
99 // preloading is actually performed by resolve_preloaded_classes.
100
101 #define WK_KLASSES_DO(do_klass) \
102 /* well-known classes */ \
103 do_klass(Object_klass, java_lang_Object ) \
104 do_klass(String_klass, java_lang_String ) \
105 do_klass(Class_klass, java_lang_Class ) \
106 do_klass(Cloneable_klass, java_lang_Cloneable ) \
107 do_klass(ClassLoader_klass, java_lang_ClassLoader ) \
108 do_klass(Serializable_klass, java_io_Serializable ) \
109 do_klass(System_klass, java_lang_System ) \
110 do_klass(Throwable_klass, java_lang_Throwable ) \
111 do_klass(Error_klass, java_lang_Error ) \
112 do_klass(ThreadDeath_klass, java_lang_ThreadDeath ) \
113 do_klass(Exception_klass, java_lang_Exception ) \
114 do_klass(RuntimeException_klass, java_lang_RuntimeException ) \
115 do_klass(SecurityManager_klass, java_lang_SecurityManager ) \
116 do_klass(ProtectionDomain_klass, java_security_ProtectionDomain ) \
117 do_klass(AccessControlContext_klass, java_security_AccessControlContext ) \
118 do_klass(SecureClassLoader_klass, java_security_SecureClassLoader ) \
119 do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException ) \
120 do_klass(NoClassDefFoundError_klass, java_lang_NoClassDefFoundError ) \
121 do_klass(LinkageError_klass, java_lang_LinkageError ) \
122 do_klass(ClassCastException_klass, java_lang_ClassCastException ) \
123 do_klass(ArrayStoreException_klass, java_lang_ArrayStoreException ) \
124 do_klass(VirtualMachineError_klass, java_lang_VirtualMachineError ) \
125 do_klass(OutOfMemoryError_klass, java_lang_OutOfMemoryError ) \
126 do_klass(StackOverflowError_klass, java_lang_StackOverflowError ) \
127 do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException ) \
128 do_klass(Reference_klass, java_lang_ref_Reference ) \
129 \
130 /* Preload ref klasses and set reference types */ \
131 do_klass(SoftReference_klass, java_lang_ref_SoftReference ) \
132 do_klass(WeakReference_klass, java_lang_ref_WeakReference ) \
133 do_klass(FinalReference_klass, java_lang_ref_FinalReference ) \
134 do_klass(PhantomReference_klass, java_lang_ref_PhantomReference ) \
135 do_klass(Finalizer_klass, java_lang_ref_Finalizer ) \
136 \
137 do_klass(Thread_klass, java_lang_Thread ) \
138 do_klass(ThreadGroup_klass, java_lang_ThreadGroup ) \
139 do_klass(Properties_klass, java_util_Properties ) \
140 do_klass(Module_klass, java_lang_Module ) \
141 do_klass(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject ) \
142 do_klass(reflect_Field_klass, java_lang_reflect_Field ) \
143 do_klass(reflect_Parameter_klass, java_lang_reflect_Parameter ) \
144 do_klass(reflect_Method_klass, java_lang_reflect_Method ) \
145 do_klass(reflect_Constructor_klass, java_lang_reflect_Constructor ) \
146 \
147 /* NOTE: needed too early in bootstrapping process to have checks based on JDK version */ \
148 /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
149 do_klass(reflect_MagicAccessorImpl_klass, reflect_MagicAccessorImpl ) \
150 do_klass(reflect_MethodAccessorImpl_klass, reflect_MethodAccessorImpl ) \
183 do_klass(Jar_Manifest_klass, java_util_jar_Manifest ) \
184 do_klass(jdk_internal_loader_ClassLoaders_klass, jdk_internal_loader_ClassLoaders ) \
185 do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass, jdk_internal_loader_ClassLoaders_AppClassLoader) \
186 do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader) \
187 do_klass(CodeSource_klass, java_security_CodeSource ) \
188 \
189 do_klass(StackTraceElement_klass, java_lang_StackTraceElement ) \
190 \
191 /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
192 do_klass(nio_Buffer_klass, java_nio_Buffer ) \
193 \
194 /* Stack Walking */ \
195 do_klass(StackWalker_klass, java_lang_StackWalker ) \
196 do_klass(AbstractStackWalker_klass, java_lang_StackStreamFactory_AbstractStackWalker ) \
197 do_klass(StackFrameInfo_klass, java_lang_StackFrameInfo ) \
198 do_klass(LiveStackFrameInfo_klass, java_lang_LiveStackFrameInfo ) \
199 \
200 /* support for stack dump lock analysis */ \
201 do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer) \
202 \
203 /* Preload boxing klasses */ \
204 do_klass(Boolean_klass, java_lang_Boolean ) \
205 do_klass(Character_klass, java_lang_Character ) \
206 do_klass(Float_klass, java_lang_Float ) \
207 do_klass(Double_klass, java_lang_Double ) \
208 do_klass(Byte_klass, java_lang_Byte ) \
209 do_klass(Short_klass, java_lang_Short ) \
210 do_klass(Integer_klass, java_lang_Integer ) \
211 do_klass(Long_klass, java_lang_Long ) \
212 \
213 /* JVMCI classes. These are loaded on-demand. */ \
214 JVMCI_WK_KLASSES_DO(do_klass) \
215 \
216 /*end*/
217
218
219 class SystemDictionary : AllStatic {
220 friend class VMStructs;
221 friend class SystemDictionaryHandles;
222
223 public:
374 int number_of_entries);
375 // Printing
376 static void print() { return print_on(tty); }
377 static void print_on(outputStream* st);
378 static void print_shared(outputStream* st);
379 static void dump(outputStream* st, bool verbose);
380
381 // Monotonically increasing counter which grows as classes are
382 // loaded or modifications such as hot-swapping or setting/removing
383 // of breakpoints are performed
384 static inline int number_of_modifications() { assert_locked_or_safepoint(Compile_lock); return _number_of_modifications; }
385 // Needed by evolution and breakpoint code
386 static inline void notice_modification() { assert_locked_or_safepoint(Compile_lock); ++_number_of_modifications; }
387
388 // Verification
389 static void verify();
390
391 // Initialization
392 static void initialize(TRAPS);
393
394 // Checked fast access to commonly used classes - mostly preloaded
395 static InstanceKlass* check_klass(InstanceKlass* k) {
396 assert(k != NULL, "klass not loaded");
397 return k;
398 }
399
400 static bool resolve_wk_klass(WKID id, TRAPS);
401 static void resolve_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
402 static void resolve_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
403 int limit = (int)end_id + 1;
404 resolve_wk_klasses_until((WKID) limit, start_id, THREAD);
405 }
406
407 public:
408 #define WK_KLASS_DECLARE(name, symbol) \
409 static InstanceKlass* name() { return check_klass(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \
410 static InstanceKlass** name##_addr() { \
411 return &_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]; \
412 } \
413 static bool name##_is_loaded() { \
414 return _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)] != NULL; \
418
419 static InstanceKlass* well_known_klass(WKID id) {
420 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
421 return _well_known_klasses[id];
422 }
423
424 static InstanceKlass** well_known_klass_addr(WKID id) {
425 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
426 return &_well_known_klasses[id];
427 }
428 static void well_known_klasses_do(MetaspaceClosure* it);
429
430 // Local definition for direct access to the private array:
431 #define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]
432
433 static InstanceKlass* box_klass(BasicType t) {
434 assert((uint)t < T_VOID+1, "range check");
435 return check_klass(_box_klasses[t]);
436 }
437 static BasicType box_klass_type(Klass* k); // inverse of box_klass
438
439 protected:
440 // Returns the class loader data to be used when looking up/updating the
441 // system dictionary.
442 static ClassLoaderData *class_loader_data(Handle class_loader) {
443 return ClassLoaderData::class_loader_data(class_loader());
444 }
445
446 public:
447 // Tells whether ClassLoader.checkPackageAccess is present
448 static bool has_checkPackageAccess() { return _has_checkPackageAccess; }
449
450 static bool Parameter_klass_loaded() { return WK_KLASS(reflect_Parameter_klass) != NULL; }
451 static bool Class_klass_loaded() { return WK_KLASS(Class_klass) != NULL; }
452 static bool Cloneable_klass_loaded() { return WK_KLASS(Cloneable_klass) != NULL; }
453 static bool Object_klass_loaded() { return WK_KLASS(Object_klass) != NULL; }
454 static bool ClassLoader_klass_loaded() { return WK_KLASS(ClassLoader_klass) != NULL; }
455
456 // Returns java system loader
457 static oop java_system_loader();
678 static InstanceKlass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
679
680 // Basic find on classes in the midst of being loaded
681 static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
682
683 // Add a placeholder for a class being loaded
684 static void add_placeholder(int index,
685 Symbol* class_name,
686 ClassLoaderData* loader_data);
687 static void remove_placeholder(int index,
688 Symbol* class_name,
689 ClassLoaderData* loader_data);
690
691 // Performs cleanups after resolve_super_or_fail. This typically needs
692 // to be called on failure.
693 // Won't throw, but can block.
694 static void resolution_cleanups(Symbol* class_name,
695 ClassLoaderData* loader_data,
696 TRAPS);
697
698 // Resolve preloaded classes so they can be used like SystemDictionary::String_klass()
699 static void resolve_preloaded_classes(TRAPS);
700
701 // Class loader constraints
702 static void check_constraints(unsigned int hash,
703 InstanceKlass* k, Handle loader,
704 bool defining, TRAPS);
705 static void update_dictionary(unsigned int d_hash,
706 int p_index, unsigned int p_hash,
707 InstanceKlass* k, Handle loader,
708 TRAPS);
709
710 // Variables holding commonly used klasses (preloaded)
711 static InstanceKlass* _well_known_klasses[];
712
713 // table of box klasses (int_klass, etc.)
714 static InstanceKlass* _box_klasses[T_VOID+1];
715
716 private:
717 static oop _java_system_loader;
718 static oop _java_platform_loader;
719
720 static bool _has_checkPackageAccess;
721 };
722
723 #endif // SHARE_VM_CLASSFILE_SYSTEMDICTIONARY_HPP
|
68 // - entries must be fully formed before they are available to concurrent
69 // readers (we must ensure write ordering)
70 //
71 // Note that placeholders are deleted at any time, as they are removed
72 // when a class is completely loaded. Therefore, readers as well as writers
73 // of placeholders must hold the SystemDictionary_lock.
74 //
75
76 class ClassFileStream;
77 class Dictionary;
78 class PlaceholderTable;
79 class LoaderConstraintTable;
80 template <MEMFLAGS F> class HashtableBucket;
81 class ResolutionErrorTable;
82 class SymbolPropertyTable;
83 class ProtectionDomainCacheTable;
84 class ProtectionDomainCacheEntry;
85 class GCTimer;
86 class OopStorage;
87
88 // Certain classes, such as java.lang.Object and java.lang.String,
89 // 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. They are
93 // resolved during early VM start-up in a specific order.
94
95 #define WK_KLASS_ENUM_NAME(kname) kname##_knum
96
97 // Each well-known class has a short klass name (like object_klass),
98 // and a vmSymbol name (like java_lang_Object).
99 // The order of these definitions is significant; it is the order in which
100 // class resolution is actually performed by resolve_well_known_classes.
101
102 #define WK_KLASSES_DO(do_klass) \
103 /* well-known classes */ \
104 do_klass(Object_klass, java_lang_Object ) \
105 do_klass(String_klass, java_lang_String ) \
106 do_klass(Class_klass, java_lang_Class ) \
107 do_klass(Cloneable_klass, java_lang_Cloneable ) \
108 do_klass(ClassLoader_klass, java_lang_ClassLoader ) \
109 do_klass(Serializable_klass, java_io_Serializable ) \
110 do_klass(System_klass, java_lang_System ) \
111 do_klass(Throwable_klass, java_lang_Throwable ) \
112 do_klass(Error_klass, java_lang_Error ) \
113 do_klass(ThreadDeath_klass, java_lang_ThreadDeath ) \
114 do_klass(Exception_klass, java_lang_Exception ) \
115 do_klass(RuntimeException_klass, java_lang_RuntimeException ) \
116 do_klass(SecurityManager_klass, java_lang_SecurityManager ) \
117 do_klass(ProtectionDomain_klass, java_security_ProtectionDomain ) \
118 do_klass(AccessControlContext_klass, java_security_AccessControlContext ) \
119 do_klass(SecureClassLoader_klass, java_security_SecureClassLoader ) \
120 do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException ) \
121 do_klass(NoClassDefFoundError_klass, java_lang_NoClassDefFoundError ) \
122 do_klass(LinkageError_klass, java_lang_LinkageError ) \
123 do_klass(ClassCastException_klass, java_lang_ClassCastException ) \
124 do_klass(ArrayStoreException_klass, java_lang_ArrayStoreException ) \
125 do_klass(VirtualMachineError_klass, java_lang_VirtualMachineError ) \
126 do_klass(OutOfMemoryError_klass, java_lang_OutOfMemoryError ) \
127 do_klass(StackOverflowError_klass, java_lang_StackOverflowError ) \
128 do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException ) \
129 do_klass(Reference_klass, java_lang_ref_Reference ) \
130 \
131 /* ref klasses and set reference types */ \
132 do_klass(SoftReference_klass, java_lang_ref_SoftReference ) \
133 do_klass(WeakReference_klass, java_lang_ref_WeakReference ) \
134 do_klass(FinalReference_klass, java_lang_ref_FinalReference ) \
135 do_klass(PhantomReference_klass, java_lang_ref_PhantomReference ) \
136 do_klass(Finalizer_klass, java_lang_ref_Finalizer ) \
137 \
138 do_klass(Thread_klass, java_lang_Thread ) \
139 do_klass(ThreadGroup_klass, java_lang_ThreadGroup ) \
140 do_klass(Properties_klass, java_util_Properties ) \
141 do_klass(Module_klass, java_lang_Module ) \
142 do_klass(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject ) \
143 do_klass(reflect_Field_klass, java_lang_reflect_Field ) \
144 do_klass(reflect_Parameter_klass, java_lang_reflect_Parameter ) \
145 do_klass(reflect_Method_klass, java_lang_reflect_Method ) \
146 do_klass(reflect_Constructor_klass, java_lang_reflect_Constructor ) \
147 \
148 /* NOTE: needed too early in bootstrapping process to have checks based on JDK version */ \
149 /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
150 do_klass(reflect_MagicAccessorImpl_klass, reflect_MagicAccessorImpl ) \
151 do_klass(reflect_MethodAccessorImpl_klass, reflect_MethodAccessorImpl ) \
184 do_klass(Jar_Manifest_klass, java_util_jar_Manifest ) \
185 do_klass(jdk_internal_loader_ClassLoaders_klass, jdk_internal_loader_ClassLoaders ) \
186 do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass, jdk_internal_loader_ClassLoaders_AppClassLoader) \
187 do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader) \
188 do_klass(CodeSource_klass, java_security_CodeSource ) \
189 \
190 do_klass(StackTraceElement_klass, java_lang_StackTraceElement ) \
191 \
192 /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
193 do_klass(nio_Buffer_klass, java_nio_Buffer ) \
194 \
195 /* Stack Walking */ \
196 do_klass(StackWalker_klass, java_lang_StackWalker ) \
197 do_klass(AbstractStackWalker_klass, java_lang_StackStreamFactory_AbstractStackWalker ) \
198 do_klass(StackFrameInfo_klass, java_lang_StackFrameInfo ) \
199 do_klass(LiveStackFrameInfo_klass, java_lang_LiveStackFrameInfo ) \
200 \
201 /* support for stack dump lock analysis */ \
202 do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer) \
203 \
204 /* boxing klasses */ \
205 do_klass(Boolean_klass, java_lang_Boolean ) \
206 do_klass(Character_klass, java_lang_Character ) \
207 do_klass(Float_klass, java_lang_Float ) \
208 do_klass(Double_klass, java_lang_Double ) \
209 do_klass(Byte_klass, java_lang_Byte ) \
210 do_klass(Short_klass, java_lang_Short ) \
211 do_klass(Integer_klass, java_lang_Integer ) \
212 do_klass(Long_klass, java_lang_Long ) \
213 \
214 /* JVMCI classes. These are loaded on-demand. */ \
215 JVMCI_WK_KLASSES_DO(do_klass) \
216 \
217 /*end*/
218
219
220 class SystemDictionary : AllStatic {
221 friend class VMStructs;
222 friend class SystemDictionaryHandles;
223
224 public:
375 int number_of_entries);
376 // Printing
377 static void print() { return print_on(tty); }
378 static void print_on(outputStream* st);
379 static void print_shared(outputStream* st);
380 static void dump(outputStream* st, bool verbose);
381
382 // Monotonically increasing counter which grows as classes are
383 // loaded or modifications such as hot-swapping or setting/removing
384 // of breakpoints are performed
385 static inline int number_of_modifications() { assert_locked_or_safepoint(Compile_lock); return _number_of_modifications; }
386 // Needed by evolution and breakpoint code
387 static inline void notice_modification() { assert_locked_or_safepoint(Compile_lock); ++_number_of_modifications; }
388
389 // Verification
390 static void verify();
391
392 // Initialization
393 static void initialize(TRAPS);
394
395 // Checked fast access to the well-known classes -- so that you don't try to use them
396 // before they are resolved.
397 static InstanceKlass* check_klass(InstanceKlass* k) {
398 assert(k != NULL, "klass not loaded");
399 return k;
400 }
401
402 static bool resolve_wk_klass(WKID id, TRAPS);
403 static void resolve_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
404 static void resolve_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
405 int limit = (int)end_id + 1;
406 resolve_wk_klasses_until((WKID) limit, start_id, THREAD);
407 }
408
409 public:
410 #define WK_KLASS_DECLARE(name, symbol) \
411 static InstanceKlass* name() { return check_klass(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \
412 static InstanceKlass** name##_addr() { \
413 return &_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]; \
414 } \
415 static bool name##_is_loaded() { \
416 return _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)] != NULL; \
420
421 static InstanceKlass* well_known_klass(WKID id) {
422 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
423 return _well_known_klasses[id];
424 }
425
426 static InstanceKlass** well_known_klass_addr(WKID id) {
427 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
428 return &_well_known_klasses[id];
429 }
430 static void well_known_klasses_do(MetaspaceClosure* it);
431
432 // Local definition for direct access to the private array:
433 #define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]
434
435 static InstanceKlass* box_klass(BasicType t) {
436 assert((uint)t < T_VOID+1, "range check");
437 return check_klass(_box_klasses[t]);
438 }
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
446
447 protected:
448 // Returns the class loader data to be used when looking up/updating the
449 // system dictionary.
450 static ClassLoaderData *class_loader_data(Handle class_loader) {
451 return ClassLoaderData::class_loader_data(class_loader());
452 }
453
454 public:
455 // Tells whether ClassLoader.checkPackageAccess is present
456 static bool has_checkPackageAccess() { return _has_checkPackageAccess; }
457
458 static bool Parameter_klass_loaded() { return WK_KLASS(reflect_Parameter_klass) != NULL; }
459 static bool Class_klass_loaded() { return WK_KLASS(Class_klass) != NULL; }
460 static bool Cloneable_klass_loaded() { return WK_KLASS(Cloneable_klass) != NULL; }
461 static bool Object_klass_loaded() { return WK_KLASS(Object_klass) != NULL; }
462 static bool ClassLoader_klass_loaded() { return WK_KLASS(ClassLoader_klass) != NULL; }
463
464 // Returns java system loader
465 static oop java_system_loader();
686 static InstanceKlass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
687
688 // Basic find on classes in the midst of being loaded
689 static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
690
691 // Add a placeholder for a class being loaded
692 static void add_placeholder(int index,
693 Symbol* class_name,
694 ClassLoaderData* loader_data);
695 static void remove_placeholder(int index,
696 Symbol* class_name,
697 ClassLoaderData* loader_data);
698
699 // Performs cleanups after resolve_super_or_fail. This typically needs
700 // to be called on failure.
701 // Won't throw, but can block.
702 static void resolution_cleanups(Symbol* class_name,
703 ClassLoaderData* loader_data,
704 TRAPS);
705
706 // Resolve well_known classes so they can be used like SystemDictionary::String_klass()
707 static void resolve_well_known_classes(TRAPS);
708
709 // Class loader constraints
710 static void check_constraints(unsigned int hash,
711 InstanceKlass* k, Handle loader,
712 bool defining, TRAPS);
713 static void update_dictionary(unsigned int d_hash,
714 int p_index, unsigned int p_hash,
715 InstanceKlass* k, Handle loader,
716 TRAPS);
717
718 static InstanceKlass* _well_known_klasses[];
719
720 // table of box klasses (int_klass, etc.)
721 static InstanceKlass* _box_klasses[T_VOID+1];
722
723 private:
724 static oop _java_system_loader;
725 static oop _java_platform_loader;
726
727 static bool _has_checkPackageAccess;
728 };
729
730 #endif // SHARE_VM_CLASSFILE_SYSTEMDICTIONARY_HPP
|