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