hotspot/src/share/vm/classfile/systemDictionary.hpp
changeset 46554 aa1cfd918c4f
parent 46505 fd4bc78630b1
child 46729 c62d2e8b2728
equal deleted inserted replaced
45608:9927a9f16738 46554:aa1cfd918c4f
    76 class PlaceholderTable;
    76 class PlaceholderTable;
    77 class LoaderConstraintTable;
    77 class LoaderConstraintTable;
    78 template <MEMFLAGS F> class HashtableBucket;
    78 template <MEMFLAGS F> class HashtableBucket;
    79 class ResolutionErrorTable;
    79 class ResolutionErrorTable;
    80 class SymbolPropertyTable;
    80 class SymbolPropertyTable;
       
    81 class GCTimer;
    81 
    82 
    82 // Certain classes are preloaded, such as java.lang.Object and java.lang.String.
    83 // Certain classes are preloaded, such as java.lang.Object and java.lang.String.
    83 // They are all "well-known", in the sense that no class loader is allowed
    84 // They are all "well-known", in the sense that no class loader is allowed
    84 // to provide a different definition.
    85 // to provide a different definition.
    85 //
    86 //
   153   /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */                                            \
   154   /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */                                            \
   154   do_klass(DirectMethodHandle_klass,                    java_lang_invoke_DirectMethodHandle,       Opt                 ) \
   155   do_klass(DirectMethodHandle_klass,                    java_lang_invoke_DirectMethodHandle,       Opt                 ) \
   155   do_klass(MethodHandle_klass,                          java_lang_invoke_MethodHandle,             Pre                 ) \
   156   do_klass(MethodHandle_klass,                          java_lang_invoke_MethodHandle,             Pre                 ) \
   156   do_klass(VarHandle_klass,                             java_lang_invoke_VarHandle,                Pre                 ) \
   157   do_klass(VarHandle_klass,                             java_lang_invoke_VarHandle,                Pre                 ) \
   157   do_klass(MemberName_klass,                            java_lang_invoke_MemberName,               Pre                 ) \
   158   do_klass(MemberName_klass,                            java_lang_invoke_MemberName,               Pre                 ) \
       
   159   do_klass(ResolvedMethodName_klass,                    java_lang_invoke_ResolvedMethodName,       Pre                 ) \
   158   do_klass(MethodHandleNatives_klass,                   java_lang_invoke_MethodHandleNatives,      Pre                 ) \
   160   do_klass(MethodHandleNatives_klass,                   java_lang_invoke_MethodHandleNatives,      Pre                 ) \
   159   do_klass(LambdaForm_klass,                            java_lang_invoke_LambdaForm,               Opt                 ) \
   161   do_klass(LambdaForm_klass,                            java_lang_invoke_LambdaForm,               Opt                 ) \
   160   do_klass(MethodType_klass,                            java_lang_invoke_MethodType,               Pre                 ) \
   162   do_klass(MethodType_klass,                            java_lang_invoke_MethodType,               Pre                 ) \
   161   do_klass(BootstrapMethodError_klass,                  java_lang_BootstrapMethodError,            Pre                 ) \
   163   do_klass(BootstrapMethodError_klass,                  java_lang_BootstrapMethodError,            Pre                 ) \
   162   do_klass(CallSite_klass,                              java_lang_invoke_CallSite,                 Pre                 ) \
   164   do_klass(CallSite_klass,                              java_lang_invoke_CallSite,                 Pre                 ) \
   257   static Klass* resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS);
   259   static Klass* resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS);
   258   // Convenient call for null loader and protection domain.
   260   // Convenient call for null loader and protection domain.
   259   static Klass* resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS);
   261   static Klass* resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS);
   260 protected:
   262 protected:
   261   // handle error translation for resolve_or_null results
   263   // handle error translation for resolve_or_null results
   262   static Klass* handle_resolution_exception(Symbol* class_name, bool throw_error, KlassHandle klass_h, TRAPS);
   264   static Klass* handle_resolution_exception(Symbol* class_name, bool throw_error, Klass* klass, TRAPS);
   263 
   265 
   264 public:
   266 public:
   265 
   267 
   266   // Returns a class with a given class name and class loader.
   268   // Returns a class with a given class name and class loader.
   267   // Loads the class if needed. If not found NULL is returned.
   269   // Loads the class if needed. If not found NULL is returned.
   280                                       TRAPS);
   282                                       TRAPS);
   281 
   283 
   282   // Parse new stream. This won't update the system dictionary or
   284   // Parse new stream. This won't update the system dictionary or
   283   // class hierarchy, simply parse the stream. Used by JVMTI RedefineClasses.
   285   // class hierarchy, simply parse the stream. Used by JVMTI RedefineClasses.
   284   // Also used by Unsafe_DefineAnonymousClass
   286   // Also used by Unsafe_DefineAnonymousClass
   285   static Klass* parse_stream(Symbol* class_name,
   287   static InstanceKlass* parse_stream(Symbol* class_name,
   286                              Handle class_loader,
   288                                      Handle class_loader,
   287                              Handle protection_domain,
   289                                      Handle protection_domain,
   288                              ClassFileStream* st,
   290                                      ClassFileStream* st,
   289                              TRAPS) {
   291                                      TRAPS) {
   290     return parse_stream(class_name,
   292     return parse_stream(class_name,
   291                         class_loader,
   293                         class_loader,
   292                         protection_domain,
   294                         protection_domain,
   293                         st,
   295                         st,
   294                         NULL, // host klass
   296                         NULL, // host klass
   295                         NULL, // cp_patches
   297                         NULL, // cp_patches
   296                         THREAD);
   298                         THREAD);
   297   }
   299   }
   298   static Klass* parse_stream(Symbol* class_name,
   300   static InstanceKlass* parse_stream(Symbol* class_name,
   299                              Handle class_loader,
   301                                      Handle class_loader,
   300                              Handle protection_domain,
   302                                      Handle protection_domain,
   301                              ClassFileStream* st,
   303                                      ClassFileStream* st,
   302                              const InstanceKlass* host_klass,
   304                                      const InstanceKlass* host_klass,
   303                              GrowableArray<Handle>* cp_patches,
   305                                      GrowableArray<Handle>* cp_patches,
   304                              TRAPS);
   306                                      TRAPS);
   305 
   307 
   306   // Resolve from stream (called by jni_DefineClass and JVM_DefineClass)
   308   // Resolve from stream (called by jni_DefineClass and JVM_DefineClass)
   307   static Klass* resolve_from_stream(Symbol* class_name,
   309   static InstanceKlass* resolve_from_stream(Symbol* class_name,
   308                                     Handle class_loader,
   310                                             Handle class_loader,
   309                                     Handle protection_domain,
   311                                             Handle protection_domain,
   310                                     ClassFileStream* st,
   312                                             ClassFileStream* st,
   311                                     TRAPS);
   313                                             TRAPS);
   312 
   314 
   313   // Lookup an already loaded class. If not found NULL is returned.
   315   // Lookup an already loaded class. If not found NULL is returned.
   314   static Klass* find(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
   316   static Klass* find(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
   315 
   317 
   316   // Lookup an already loaded instance or array class.
   318   // Lookup an already loaded instance or array class.
   345   static Klass* find_constrained_instance_or_array_klass(Symbol* class_name,
   347   static Klass* find_constrained_instance_or_array_klass(Symbol* class_name,
   346                                                            Handle class_loader,
   348                                                            Handle class_loader,
   347                                                            TRAPS);
   349                                                            TRAPS);
   348 
   350 
   349   // Iterate over all klasses in dictionary
   351   // Iterate over all klasses in dictionary
   350   //   Just the classes from defining class loaders
   352   // Just the classes from defining class loaders
   351   static void classes_do(void f(Klass*));
   353   static void classes_do(void f(Klass*));
   352   // Added for initialize_itable_for_klass to handle exceptions
   354   // Added for initialize_itable_for_klass to handle exceptions
   353   static void classes_do(void f(Klass*, TRAPS), TRAPS);
   355   static void classes_do(void f(Klass*, TRAPS), TRAPS);
   354   //   All classes, and their class loaders
   356   // All classes, and their class loaders, including initiating class loaders
   355   static void classes_do(void f(Klass*, ClassLoaderData*));
   357   static void classes_do(void f(Klass*, ClassLoaderData*));
   356 
   358 
   357   static void placeholders_do(void f(Symbol*));
   359   // Iterate over all methods in all klasses
   358 
       
   359   // Iterate over all methods in all klasses in dictionary
       
   360   static void methods_do(void f(Method*));
   360   static void methods_do(void f(Method*));
   361 
   361 
   362   // Garbage collection support
   362   // Garbage collection support
   363 
   363 
   364   // This method applies "blk->do_oop" to all the pointers to "system"
   364   // This method applies "blk->do_oop" to all the pointers to "system"
   365   // classes and loaders.
   365   // classes and loaders.
   366   static void always_strong_oops_do(OopClosure* blk);
   366   static void always_strong_oops_do(OopClosure* blk);
   367   static void always_strong_classes_do(KlassClosure* closure);
       
   368 
   367 
   369   // Unload (that is, break root links to) all unmarked classes and
   368   // Unload (that is, break root links to) all unmarked classes and
   370   // loaders.  Returns "true" iff something was unloaded.
   369   // loaders.  Returns "true" iff something was unloaded.
   371   static bool do_unloading(BoolObjectClosure* is_alive,
   370   static bool do_unloading(BoolObjectClosure* is_alive,
   372                            bool clean_previous_versions = true);
   371                            GCTimer* gc_timer,
       
   372                            bool do_cleaning = true);
   373 
   373 
   374   // Used by DumpSharedSpaces only to remove classes that failed verification
   374   // Used by DumpSharedSpaces only to remove classes that failed verification
   375   static void remove_classes_in_error_state();
   375   static void remove_classes_in_error_state();
   376 
   376 
   377   static int calculate_systemdictionary_size(int loadedclasses);
   377   static int calculate_systemdictionary_size(int loadedclasses);
   381   static void roots_oops_do(OopClosure* strong, OopClosure* weak);
   381   static void roots_oops_do(OopClosure* strong, OopClosure* weak);
   382 
   382 
   383   // System loader lock
   383   // System loader lock
   384   static oop system_loader_lock()           { return _system_loader_lock_obj; }
   384   static oop system_loader_lock()           { return _system_loader_lock_obj; }
   385 
   385 
   386 protected:
       
   387   // Extended Redefine classes support (tbi)
       
   388   static void preloaded_classes_do(KlassClosure* f);
       
   389   static void lazily_loaded_classes_do(KlassClosure* f);
       
   390 public:
   386 public:
   391   // Sharing support.
   387   // Sharing support.
   392   static void reorder_dictionary();
   388   static void reorder_dictionary();
   393   static void copy_buckets(char** top, char* end);
   389   static void copy_buckets(char** top, char* end);
   394   static void copy_table(char** top, char* end);
   390   static void copy_table(char** top, char* end);
   395   static void reverse();
       
   396   static void set_shared_dictionary(HashtableBucket<mtClass>* t, int length,
   391   static void set_shared_dictionary(HashtableBucket<mtClass>* t, int length,
   397                                     int number_of_entries);
   392                                     int number_of_entries);
   398   // Printing
   393   // Printing
   399   static void print(bool details = true);
   394   static void print(bool details = true);
   400   static void print_shared(bool details = true);
   395   static void print_shared(bool details = true);
   514                                          Handle loader2, bool is_method, TRAPS);
   509                                          Handle loader2, bool is_method, TRAPS);
   515 
   510 
   516   // JSR 292
   511   // JSR 292
   517   // find a java.lang.invoke.MethodHandle.invoke* method for a given signature
   512   // find a java.lang.invoke.MethodHandle.invoke* method for a given signature
   518   // (asks Java to compute it if necessary, except in a compiler thread)
   513   // (asks Java to compute it if necessary, except in a compiler thread)
   519   static methodHandle find_method_handle_invoker(KlassHandle klass,
   514   static methodHandle find_method_handle_invoker(Klass* klass,
   520                                                  Symbol* name,
   515                                                  Symbol* name,
   521                                                  Symbol* signature,
   516                                                  Symbol* signature,
   522                                                  KlassHandle accessing_klass,
   517                                                  Klass* accessing_klass,
   523                                                  Handle *appendix_result,
   518                                                  Handle *appendix_result,
   524                                                  Handle *method_type_result,
   519                                                  Handle *method_type_result,
   525                                                  TRAPS);
   520                                                  TRAPS);
   526   // for a given signature, find the internal MethodHandle method (linkTo* or invokeBasic)
   521   // for a given signature, find the internal MethodHandle method (linkTo* or invokeBasic)
   527   // (does not ask Java, since this is a low-level intrinsic defined by the JVM)
   522   // (does not ask Java, since this is a low-level intrinsic defined by the JVM)
   529                                                    Symbol* signature,
   524                                                    Symbol* signature,
   530                                                    TRAPS);
   525                                                    TRAPS);
   531   // find a java.lang.invoke.MethodType object for a given signature
   526   // find a java.lang.invoke.MethodType object for a given signature
   532   // (asks Java to compute it if necessary, except in a compiler thread)
   527   // (asks Java to compute it if necessary, except in a compiler thread)
   533   static Handle    find_method_handle_type(Symbol* signature,
   528   static Handle    find_method_handle_type(Symbol* signature,
   534                                            KlassHandle accessing_klass,
   529                                            Klass* accessing_klass,
   535                                            TRAPS);
   530                                            TRAPS);
   536 
   531 
   537   // ask Java to compute a java.lang.invoke.MethodHandle object for a given CP entry
   532   // ask Java to compute a java.lang.invoke.MethodHandle object for a given CP entry
   538   static Handle    link_method_handle_constant(KlassHandle caller,
   533   static Handle    link_method_handle_constant(Klass* caller,
   539                                                int ref_kind, //e.g., JVM_REF_invokeVirtual
   534                                                int ref_kind, //e.g., JVM_REF_invokeVirtual
   540                                                KlassHandle callee,
   535                                                Klass* callee,
   541                                                Symbol* name,
   536                                                Symbol* name,
   542                                                Symbol* signature,
   537                                                Symbol* signature,
   543                                                TRAPS);
   538                                                TRAPS);
   544 
   539 
   545   // ask Java to create a dynamic call site, while linking an invokedynamic op
   540   // ask Java to create a dynamic call site, while linking an invokedynamic op
   546   static methodHandle find_dynamic_call_site_invoker(KlassHandle caller,
   541   static methodHandle find_dynamic_call_site_invoker(Klass* caller,
   547                                                      Handle bootstrap_method,
   542                                                      Handle bootstrap_method,
   548                                                      Symbol* name,
   543                                                      Symbol* name,
   549                                                      Symbol* type,
   544                                                      Symbol* type,
   550                                                      Handle *appendix_result,
   545                                                      Handle *appendix_result,
   551                                                      Handle *method_type_result,
   546                                                      Handle *method_type_result,
   613   // for VM_CounterDecay iteration support
   608   // for VM_CounterDecay iteration support
   614   friend class CounterDecay;
   609   friend class CounterDecay;
   615   static Klass* try_get_next_class();
   610   static Klass* try_get_next_class();
   616 
   611 
   617 protected:
   612 protected:
   618   static void validate_protection_domain(instanceKlassHandle klass,
   613   static void validate_protection_domain(InstanceKlass* klass,
   619                                          Handle class_loader,
   614                                          Handle class_loader,
   620                                          Handle protection_domain, TRAPS);
   615                                          Handle protection_domain, TRAPS);
   621 
   616 
   622   friend class VM_PopulateDumpSharedSpace;
   617   friend class VM_PopulateDumpSharedSpace;
   623   friend class TraversePlaceholdersClosure;
   618   friend class TraversePlaceholdersClosure;
   629   static SymbolPropertyTable* invoke_method_table() { return _invoke_method_table; }
   624   static SymbolPropertyTable* invoke_method_table() { return _invoke_method_table; }
   630 
   625 
   631   // Basic loading operations
   626   // Basic loading operations
   632   static Klass* resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
   627   static Klass* resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
   633   static Klass* resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
   628   static Klass* resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
   634   static instanceKlassHandle handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS);
   629   static InstanceKlass* handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS);
   635   // Wait on SystemDictionary_lock; unlocks lockObject before
   630   // Wait on SystemDictionary_lock; unlocks lockObject before
   636   // waiting; relocks lockObject with correct recursion count
   631   // waiting; relocks lockObject with correct recursion count
   637   // after waiting, but before reentering SystemDictionary_lock
   632   // after waiting, but before reentering SystemDictionary_lock
   638   // to preserve lock order semantics.
   633   // to preserve lock order semantics.
   639   static void double_lock_wait(Handle lockObject, TRAPS);
   634   static void double_lock_wait(Handle lockObject, TRAPS);
   640   static void define_instance_class(instanceKlassHandle k, TRAPS);
   635   static void define_instance_class(InstanceKlass* k, TRAPS);
   641   static instanceKlassHandle find_or_define_instance_class(Symbol* class_name,
   636   static InstanceKlass* find_or_define_instance_class(Symbol* class_name,
   642                                                 Handle class_loader,
   637                                                 Handle class_loader,
   643                                                 instanceKlassHandle k, TRAPS);
   638                                                 InstanceKlass* k, TRAPS);
   644   static bool is_shared_class_visible(Symbol* class_name, instanceKlassHandle ik,
   639   static bool is_shared_class_visible(Symbol* class_name, InstanceKlass* ik,
   645                                       Handle class_loader, TRAPS);
   640                                       Handle class_loader, TRAPS);
   646   static instanceKlassHandle load_shared_class(instanceKlassHandle ik,
   641   static InstanceKlass* load_shared_class(InstanceKlass* ik,
   647                                                Handle class_loader,
   642                                           Handle class_loader,
   648                                                Handle protection_domain,
   643                                           Handle protection_domain,
   649                                                TRAPS);
   644                                           TRAPS);
   650   static instanceKlassHandle load_instance_class(Symbol* class_name, Handle class_loader, TRAPS);
   645   static InstanceKlass* load_instance_class(Symbol* class_name, Handle class_loader, TRAPS);
   651   static Handle compute_loader_lock_object(Handle class_loader, TRAPS);
   646   static Handle compute_loader_lock_object(Handle class_loader, TRAPS);
   652   static void check_loader_lock_contention(Handle loader_lock, TRAPS);
   647   static void check_loader_lock_contention(Handle loader_lock, TRAPS);
   653   static bool is_parallelCapable(Handle class_loader);
   648   static bool is_parallelCapable(Handle class_loader);
   654   static bool is_parallelDefine(Handle class_loader);
   649   static bool is_parallelDefine(Handle class_loader);
   655 
   650 
   656 public:
   651 public:
   657   static instanceKlassHandle load_shared_class(Symbol* class_name,
   652   static InstanceKlass* load_shared_class(Symbol* class_name,
   658                                                Handle class_loader,
   653                                           Handle class_loader,
   659                                                TRAPS);
   654                                           TRAPS);
   660   static bool is_system_class_loader(Handle class_loader);
   655   static bool is_system_class_loader(oop class_loader);
   661   static bool is_platform_class_loader(Handle class_loader);
   656   static bool is_platform_class_loader(oop class_loader);
   662 
   657 
   663 protected:
   658 protected:
   664   static Klass* find_shared_class(Symbol* class_name);
   659   static InstanceKlass* find_shared_class(Symbol* class_name);
   665 
   660 
   666   // Setup link to hierarchy
   661   // Setup link to hierarchy
   667   static void add_to_hierarchy(instanceKlassHandle k, TRAPS);
   662   static void add_to_hierarchy(InstanceKlass* k, TRAPS);
   668 
   663 
   669   // We pass in the hashtable index so we can calculate it outside of
   664   // We pass in the hashtable index so we can calculate it outside of
   670   // the SystemDictionary_lock.
   665   // the SystemDictionary_lock.
   671 
   666 
   672   // Basic find on loaded classes
   667   // Basic find on loaded classes
   673   static Klass* find_class(int index, unsigned int hash,
   668   static InstanceKlass* find_class(int index, unsigned int hash,
   674                              Symbol* name, ClassLoaderData* loader_data);
   669                                    Symbol* name, ClassLoaderData* loader_data);
   675   static Klass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
   670   static InstanceKlass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
   676 
   671 
   677   // Basic find on classes in the midst of being loaded
   672   // Basic find on classes in the midst of being loaded
   678   static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
   673   static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
   679 
   674 
   680   // Add a placeholder for a class being loaded
   675   // Add a placeholder for a class being loaded
   695   // Initialization
   690   // Initialization
   696   static void initialize_preloaded_classes(TRAPS);
   691   static void initialize_preloaded_classes(TRAPS);
   697 
   692 
   698   // Class loader constraints
   693   // Class loader constraints
   699   static void check_constraints(int index, unsigned int hash,
   694   static void check_constraints(int index, unsigned int hash,
   700                                 instanceKlassHandle k, Handle loader,
   695                                 InstanceKlass* k, Handle loader,
   701                                 bool defining, TRAPS);
   696                                 bool defining, TRAPS);
   702   static void update_dictionary(int d_index, unsigned int d_hash,
   697   static void update_dictionary(int d_index, unsigned int d_hash,
   703                                 int p_index, unsigned int p_hash,
   698                                 int p_index, unsigned int p_hash,
   704                                 instanceKlassHandle k, Handle loader,
   699                                 InstanceKlass* k, Handle loader,
   705                                 TRAPS);
   700                                 TRAPS);
   706 
   701 
   707   // Variables holding commonly used klasses (preloaded)
   702   // Variables holding commonly used klasses (preloaded)
   708   static InstanceKlass* _well_known_klasses[];
   703   static InstanceKlass* _well_known_klasses[];
   709 
   704