hotspot/src/share/vm/classfile/systemDictionary.hpp
changeset 26135 82b516c550f7
parent 25492 d27050bdfb04
child 27247 99db666dbe8e
equal deleted inserted replaced
25956:99be217ac88d 26135:82b516c550f7
   109   do_klass(Exception_klass,                             java_lang_Exception,                       Pre                 ) \
   109   do_klass(Exception_klass,                             java_lang_Exception,                       Pre                 ) \
   110   do_klass(RuntimeException_klass,                      java_lang_RuntimeException,                Pre                 ) \
   110   do_klass(RuntimeException_klass,                      java_lang_RuntimeException,                Pre                 ) \
   111   do_klass(SecurityManager_klass,                       java_lang_SecurityManager,                 Pre                 ) \
   111   do_klass(SecurityManager_klass,                       java_lang_SecurityManager,                 Pre                 ) \
   112   do_klass(ProtectionDomain_klass,                      java_security_ProtectionDomain,            Pre                 ) \
   112   do_klass(ProtectionDomain_klass,                      java_security_ProtectionDomain,            Pre                 ) \
   113   do_klass(AccessControlContext_klass,                  java_security_AccessControlContext,        Pre                 ) \
   113   do_klass(AccessControlContext_klass,                  java_security_AccessControlContext,        Pre                 ) \
       
   114   do_klass(SecureClassLoader_klass,                     java_security_SecureClassLoader,           Pre                 ) \
   114   do_klass(ClassNotFoundException_klass,                java_lang_ClassNotFoundException,          Pre                 ) \
   115   do_klass(ClassNotFoundException_klass,                java_lang_ClassNotFoundException,          Pre                 ) \
   115   do_klass(NoClassDefFoundError_klass,                  java_lang_NoClassDefFoundError,            Pre                 ) \
   116   do_klass(NoClassDefFoundError_klass,                  java_lang_NoClassDefFoundError,            Pre                 ) \
   116   do_klass(LinkageError_klass,                          java_lang_LinkageError,                    Pre                 ) \
   117   do_klass(LinkageError_klass,                          java_lang_LinkageError,                    Pre                 ) \
   117   do_klass(ClassCastException_klass,                    java_lang_ClassCastException,              Pre                 ) \
   118   do_klass(ClassCastException_klass,                    java_lang_ClassCastException,              Pre                 ) \
   118   do_klass(ArrayStoreException_klass,                   java_lang_ArrayStoreException,             Pre                 ) \
   119   do_klass(ArrayStoreException_klass,                   java_lang_ArrayStoreException,             Pre                 ) \
   164                                                                                                                          \
   165                                                                                                                          \
   165   do_klass(StringBuffer_klass,                          java_lang_StringBuffer,                    Pre                 ) \
   166   do_klass(StringBuffer_klass,                          java_lang_StringBuffer,                    Pre                 ) \
   166   do_klass(StringBuilder_klass,                         java_lang_StringBuilder,                   Pre                 ) \
   167   do_klass(StringBuilder_klass,                         java_lang_StringBuilder,                   Pre                 ) \
   167   do_klass(misc_Unsafe_klass,                           sun_misc_Unsafe,                           Pre                 ) \
   168   do_klass(misc_Unsafe_klass,                           sun_misc_Unsafe,                           Pre                 ) \
   168                                                                                                                          \
   169                                                                                                                          \
       
   170   /* support for CDS */                                                                                                  \
       
   171   do_klass(ByteArrayInputStream_klass,                  java_io_ByteArrayInputStream,              Pre                 ) \
       
   172   do_klass(File_klass,                                  java_io_File,                              Pre                 ) \
       
   173   do_klass(URLClassLoader_klass,                        java_net_URLClassLoader,                   Pre                 ) \
       
   174   do_klass(URL_klass,                                   java_net_URL,                              Pre                 ) \
       
   175   do_klass(Jar_Manifest_klass,                          java_util_jar_Manifest,                    Pre                 ) \
       
   176   do_klass(sun_misc_Launcher_klass,                     sun_misc_Launcher,                         Pre                 ) \
       
   177   do_klass(CodeSource_klass,                            java_security_CodeSource,                  Pre                 ) \
       
   178                                                                                                                          \
   169   /* It's NULL in non-1.4 JDKs. */                                                                                       \
   179   /* It's NULL in non-1.4 JDKs. */                                                                                       \
   170   do_klass(StackTraceElement_klass,                     java_lang_StackTraceElement,               Opt                 ) \
   180   do_klass(StackTraceElement_klass,                     java_lang_StackTraceElement,               Opt                 ) \
   171   /* It's okay if this turns out to be NULL in non-1.4 JDKs. */                                                          \
   181   /* It's okay if this turns out to be NULL in non-1.4 JDKs. */                                                          \
   172   do_klass(nio_Buffer_klass,                            java_nio_Buffer,                           Opt                 ) \
   182   do_klass(nio_Buffer_klass,                            java_nio_Buffer,                           Opt                 ) \
   173                                                                                                                          \
   183                                                                                                                          \
   219   // to true.
   229   // to true.
   220 
   230 
   221   static Klass* resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS);
   231   static Klass* resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS);
   222   // Convenient call for null loader and protection domain.
   232   // Convenient call for null loader and protection domain.
   223   static Klass* resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS);
   233   static Klass* resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS);
   224 private:
   234 protected:
   225   // handle error translation for resolve_or_null results
   235   // handle error translation for resolve_or_null results
   226   static Klass* handle_resolution_exception(Symbol* class_name, bool throw_error, KlassHandle klass_h, TRAPS);
   236   static Klass* handle_resolution_exception(Symbol* class_name, bool throw_error, KlassHandle klass_h, TRAPS);
   227 
   237 
   228 public:
   238 public:
   229 
   239 
   324 
   334 
   325   // Unload (that is, break root links to) all unmarked classes and
   335   // Unload (that is, break root links to) all unmarked classes and
   326   // loaders.  Returns "true" iff something was unloaded.
   336   // loaders.  Returns "true" iff something was unloaded.
   327   static bool do_unloading(BoolObjectClosure* is_alive);
   337   static bool do_unloading(BoolObjectClosure* is_alive);
   328 
   338 
       
   339   // Used by DumpSharedSpaces only to remove classes that failed verification
       
   340   static void remove_classes_in_error_state();
       
   341 
   329   static int calculate_systemdictionary_size(int loadedclasses);
   342   static int calculate_systemdictionary_size(int loadedclasses);
   330 
   343 
   331   // Applies "f->do_oop" to all root oops in the system dictionary.
   344   // Applies "f->do_oop" to all root oops in the system dictionary.
   332   static void oops_do(OopClosure* f);
   345   static void oops_do(OopClosure* f);
   333   static void roots_oops_do(OopClosure* strong, OopClosure* weak);
   346   static void roots_oops_do(OopClosure* strong, OopClosure* weak);
   334 
   347 
   335   // System loader lock
   348   // System loader lock
   336   static oop system_loader_lock()           { return _system_loader_lock_obj; }
   349   static oop system_loader_lock()           { return _system_loader_lock_obj; }
   337 
   350 
   338 private:
   351 protected:
   339   // Extended Redefine classes support (tbi)
   352   // Extended Redefine classes support (tbi)
   340   static void preloaded_classes_do(KlassClosure* f);
   353   static void preloaded_classes_do(KlassClosure* f);
   341   static void lazily_loaded_classes_do(KlassClosure* f);
   354   static void lazily_loaded_classes_do(KlassClosure* f);
   342 public:
   355 public:
   343   // Sharing support.
   356   // Sharing support.
   346   static void copy_table(char** top, char* end);
   359   static void copy_table(char** top, char* end);
   347   static void reverse();
   360   static void reverse();
   348   static void set_shared_dictionary(HashtableBucket<mtClass>* t, int length,
   361   static void set_shared_dictionary(HashtableBucket<mtClass>* t, int length,
   349                                     int number_of_entries);
   362                                     int number_of_entries);
   350   // Printing
   363   // Printing
   351   static void print()                   PRODUCT_RETURN;
   364   static void print(bool details = true);
       
   365   static void print_shared(bool details = true);
   352   static void print_class_statistics()  PRODUCT_RETURN;
   366   static void print_class_statistics()  PRODUCT_RETURN;
   353   static void print_method_statistics() PRODUCT_RETURN;
   367   static void print_method_statistics() PRODUCT_RETURN;
   354 
   368 
   355   // Number of contained klasses
   369   // Number of contained klasses
   356   // This is both fully loaded classes and classes in the process
   370   // This is both fully loaded classes and classes in the process
   422   // The corresponding method to load the class must be called before calling them.
   436   // The corresponding method to load the class must be called before calling them.
   423   static Klass* abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); }
   437   static Klass* abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); }
   424 
   438 
   425   static void load_abstract_ownable_synchronizer_klass(TRAPS);
   439   static void load_abstract_ownable_synchronizer_klass(TRAPS);
   426 
   440 
   427 private:
   441 protected:
   428   // Tells whether ClassLoader.loadClassInternal is present
   442   // Tells whether ClassLoader.loadClassInternal is present
   429   static bool has_loadClassInternal()       { return _has_loadClassInternal; }
   443   static bool has_loadClassInternal()       { return _has_loadClassInternal; }
   430 
   444 
   431   // Returns the class loader data to be used when looking up/updating the
   445   // Returns the class loader data to be used when looking up/updating the
   432   // system dictionary.
   446   // system dictionary.
   450   // Compute the default system loader
   464   // Compute the default system loader
   451   static void compute_java_system_loader(TRAPS);
   465   static void compute_java_system_loader(TRAPS);
   452 
   466 
   453   // Register a new class loader
   467   // Register a new class loader
   454   static ClassLoaderData* register_loader(Handle class_loader, TRAPS);
   468   static ClassLoaderData* register_loader(Handle class_loader, TRAPS);
   455 private:
   469 protected:
   456   // Mirrors for primitive classes (created eagerly)
   470   // Mirrors for primitive classes (created eagerly)
   457   static oop check_mirror(oop m) {
   471   static oop check_mirror(oop m) {
   458     assert(m != NULL, "mirror not initialized");
   472     assert(m != NULL, "mirror not initialized");
   459     return m;
   473     return m;
   460   }
   474   }
   521                                    Symbol* message);
   535                                    Symbol* message);
   522   static void delete_resolution_error(ConstantPool* pool);
   536   static void delete_resolution_error(ConstantPool* pool);
   523   static Symbol* find_resolution_error(constantPoolHandle pool, int which,
   537   static Symbol* find_resolution_error(constantPoolHandle pool, int which,
   524                                        Symbol** message);
   538                                        Symbol** message);
   525 
   539 
   526  private:
   540  protected:
   527 
   541 
   528   enum Constants {
   542   enum Constants {
   529     _loader_constraint_size = 107,                     // number of entries in constraint table
   543     _loader_constraint_size = 107,                     // number of entries in constraint table
   530     _resolution_error_size  = 107,                     // number of entries in resolution error table
   544     _resolution_error_size  = 107,                     // number of entries in resolution error table
   531     _invoke_method_size     = 139,                     // number of entries in invoke method table
   545     _invoke_method_size     = 139,                     // number of entries in invoke method table
   572 public:
   586 public:
   573   // for VM_CounterDecay iteration support
   587   // for VM_CounterDecay iteration support
   574   friend class CounterDecay;
   588   friend class CounterDecay;
   575   static Klass* try_get_next_class();
   589   static Klass* try_get_next_class();
   576 
   590 
   577 private:
   591 protected:
   578   static void validate_protection_domain(instanceKlassHandle klass,
   592   static void validate_protection_domain(instanceKlassHandle klass,
   579                                          Handle class_loader,
   593                                          Handle class_loader,
   580                                          Handle protection_domain, TRAPS);
   594                                          Handle protection_domain, TRAPS);
   581 
   595 
   582   friend class VM_PopulateDumpSharedSpace;
   596   friend class VM_PopulateDumpSharedSpace;
   599   static void double_lock_wait(Handle lockObject, TRAPS);
   613   static void double_lock_wait(Handle lockObject, TRAPS);
   600   static void define_instance_class(instanceKlassHandle k, TRAPS);
   614   static void define_instance_class(instanceKlassHandle k, TRAPS);
   601   static instanceKlassHandle find_or_define_instance_class(Symbol* class_name,
   615   static instanceKlassHandle find_or_define_instance_class(Symbol* class_name,
   602                                                 Handle class_loader,
   616                                                 Handle class_loader,
   603                                                 instanceKlassHandle k, TRAPS);
   617                                                 instanceKlassHandle k, TRAPS);
   604   static instanceKlassHandle load_shared_class(Symbol* class_name,
       
   605                                                Handle class_loader, TRAPS);
       
   606   static instanceKlassHandle load_shared_class(instanceKlassHandle ik,
   618   static instanceKlassHandle load_shared_class(instanceKlassHandle ik,
   607                                                Handle class_loader, TRAPS);
   619                                                Handle class_loader,
       
   620                                                Handle protection_domain,
       
   621                                                TRAPS);
   608   static instanceKlassHandle load_instance_class(Symbol* class_name, Handle class_loader, TRAPS);
   622   static instanceKlassHandle load_instance_class(Symbol* class_name, Handle class_loader, TRAPS);
   609   static Handle compute_loader_lock_object(Handle class_loader, TRAPS);
   623   static Handle compute_loader_lock_object(Handle class_loader, TRAPS);
   610   static void check_loader_lock_contention(Handle loader_lock, TRAPS);
   624   static void check_loader_lock_contention(Handle loader_lock, TRAPS);
   611   static bool is_parallelCapable(Handle class_loader);
   625   static bool is_parallelCapable(Handle class_loader);
   612   static bool is_parallelDefine(Handle class_loader);
   626   static bool is_parallelDefine(Handle class_loader);
   613 
   627 
   614 public:
   628 public:
       
   629   static instanceKlassHandle load_shared_class(Symbol* class_name,
       
   630                                                Handle class_loader,
       
   631                                                TRAPS);
   615   static bool is_ext_class_loader(Handle class_loader);
   632   static bool is_ext_class_loader(Handle class_loader);
   616 
   633 
   617 private:
   634 protected:
   618   static Klass* find_shared_class(Symbol* class_name);
   635   static Klass* find_shared_class(Symbol* class_name);
   619 
   636 
   620   // Setup link to hierarchy
   637   // Setup link to hierarchy
   621   static void add_to_hierarchy(instanceKlassHandle k, TRAPS);
   638   static void add_to_hierarchy(instanceKlassHandle k, TRAPS);
   622 
   639