< 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 >