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 |