< prev index next >
src/hotspot/share/classfile/systemDictionary.hpp
Print this page
@@ -83,22 +83,23 @@
class ProtectionDomainCacheTable;
class ProtectionDomainCacheEntry;
class GCTimer;
class OopStorage;
-// Certain classes are preloaded, such as java.lang.Object and java.lang.String.
-// They are all "well-known", in the sense that no class loader is allowed
+// Certain classes, such as java.lang.Object and java.lang.String,
+// are all "well-known", in the sense that no class loader is allowed
// to provide a different definition.
//
-// These klasses must all have names defined in vmSymbols.
+// These klasses must all have names defined in vmSymbols. They are
+// resolved during early VM start-up in a specific order.
#define WK_KLASS_ENUM_NAME(kname) kname##_knum
// Each well-known class has a short klass name (like object_klass),
// and a vmSymbol name (like java_lang_Object).
// The order of these definitions is significant; it is the order in which
-// preloading is actually performed by resolve_preloaded_classes.
+// class resolution is actually performed by resolve_well_known_classes.
#define WK_KLASSES_DO(do_klass) \
/* well-known classes */ \
do_klass(Object_klass, java_lang_Object ) \
do_klass(String_klass, java_lang_String ) \
@@ -125,11 +126,11 @@
do_klass(OutOfMemoryError_klass, java_lang_OutOfMemoryError ) \
do_klass(StackOverflowError_klass, java_lang_StackOverflowError ) \
do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException ) \
do_klass(Reference_klass, java_lang_ref_Reference ) \
\
- /* Preload ref klasses and set reference types */ \
+ /* ref klasses and set reference types */ \
do_klass(SoftReference_klass, java_lang_ref_SoftReference ) \
do_klass(WeakReference_klass, java_lang_ref_WeakReference ) \
do_klass(FinalReference_klass, java_lang_ref_FinalReference ) \
do_klass(PhantomReference_klass, java_lang_ref_PhantomReference ) \
do_klass(Finalizer_klass, java_lang_ref_Finalizer ) \
@@ -198,11 +199,11 @@
do_klass(LiveStackFrameInfo_klass, java_lang_LiveStackFrameInfo ) \
\
/* support for stack dump lock analysis */ \
do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer) \
\
- /* Preload boxing klasses */ \
+ /* boxing klasses */ \
do_klass(Boolean_klass, java_lang_Boolean ) \
do_klass(Character_klass, java_lang_Character ) \
do_klass(Float_klass, java_lang_Float ) \
do_klass(Double_klass, java_lang_Double ) \
do_klass(Byte_klass, java_lang_Byte ) \
@@ -389,11 +390,12 @@
static void verify();
// Initialization
static void initialize(TRAPS);
- // Checked fast access to commonly used classes - mostly preloaded
+ // Checked fast access to the well-known classes -- so that you don't try to use them
+ // before they are resolved.
static InstanceKlass* check_klass(InstanceKlass* k) {
assert(k != NULL, "klass not loaded");
return k;
}
@@ -433,10 +435,16 @@
static InstanceKlass* box_klass(BasicType t) {
assert((uint)t < T_VOID+1, "range check");
return check_klass(_box_klasses[t]);
}
static BasicType box_klass_type(Klass* k); // inverse of box_klass
+#ifdef ASSERT
+ static bool is_well_known_klass(Klass* k) {
+ return is_well_known_klass(k->name());
+ }
+ static bool is_well_known_klass(Symbol* class_name);
+#endif
protected:
// Returns the class loader data to be used when looking up/updating the
// system dictionary.
static ClassLoaderData *class_loader_data(Handle class_loader) {
@@ -693,23 +701,22 @@
// Won't throw, but can block.
static void resolution_cleanups(Symbol* class_name,
ClassLoaderData* loader_data,
TRAPS);
- // Resolve preloaded classes so they can be used like SystemDictionary::String_klass()
- static void resolve_preloaded_classes(TRAPS);
+ // Resolve well_known classes so they can be used like SystemDictionary::String_klass()
+ static void resolve_well_known_classes(TRAPS);
// Class loader constraints
static void check_constraints(unsigned int hash,
InstanceKlass* k, Handle loader,
bool defining, TRAPS);
static void update_dictionary(unsigned int d_hash,
int p_index, unsigned int p_hash,
InstanceKlass* k, Handle loader,
TRAPS);
- // Variables holding commonly used klasses (preloaded)
static InstanceKlass* _well_known_klasses[];
// table of box klasses (int_klass, etc.)
static InstanceKlass* _box_klasses[T_VOID+1];
< prev index next >