Mercurial > hg > graal-jvmci-8
comparison src/share/vm/classfile/systemDictionary.hpp @ 20375:6e0cb14ce59b
8046070: Class Data Sharing clean up and refactoring
Summary: Cleaned up CDS to be more configurable, maintainable and extensible
Reviewed-by: dholmes, coleenp, acorn, mchung
author | iklam |
---|---|
date | Thu, 21 Aug 2014 13:57:51 -0700 |
parents | 2c6ef90f030a |
children | 4cb90023bf2b c2844108a708 |
comparison
equal
deleted
inserted
replaced
20374:999824269b71 | 20375:6e0cb14ce59b |
---|---|
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 ) \ |
165 \ | 166 \ |
166 do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \ | 167 do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \ |
167 do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \ | 168 do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \ |
168 do_klass(misc_Unsafe_klass, sun_misc_Unsafe, Pre ) \ | 169 do_klass(misc_Unsafe_klass, sun_misc_Unsafe, Pre ) \ |
169 \ | 170 \ |
171 /* support for CDS */ \ | |
172 do_klass(ByteArrayInputStream_klass, java_io_ByteArrayInputStream, Pre ) \ | |
173 do_klass(File_klass, java_io_File, Pre ) \ | |
174 do_klass(URLClassLoader_klass, java_net_URLClassLoader, Pre ) \ | |
175 do_klass(URL_klass, java_net_URL, Pre ) \ | |
176 do_klass(Jar_Manifest_klass, java_util_jar_Manifest, Pre ) \ | |
177 do_klass(sun_misc_Launcher_klass, sun_misc_Launcher, Pre ) \ | |
178 do_klass(CodeSource_klass, java_security_CodeSource, Pre ) \ | |
179 \ | |
170 /* It's NULL in non-1.4 JDKs. */ \ | 180 /* It's NULL in non-1.4 JDKs. */ \ |
171 do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \ | 181 do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \ |
172 /* Universe::is_gte_jdk14x_version() is not set up by this point. */ \ | 182 /* Universe::is_gte_jdk14x_version() is not set up by this point. */ \ |
173 /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \ | 183 /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \ |
174 do_klass(nio_Buffer_klass, java_nio_Buffer, Opt ) \ | 184 do_klass(nio_Buffer_klass, java_nio_Buffer, Opt ) \ |
224 // to true. | 234 // to true. |
225 | 235 |
226 static Klass* resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS); | 236 static Klass* resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS); |
227 // Convenient call for null loader and protection domain. | 237 // Convenient call for null loader and protection domain. |
228 static Klass* resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS); | 238 static Klass* resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS); |
229 private: | 239 protected: |
230 // handle error translation for resolve_or_null results | 240 // handle error translation for resolve_or_null results |
231 static Klass* handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS); | 241 static Klass* handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS); |
232 | 242 |
233 public: | 243 public: |
234 | 244 |
329 | 339 |
330 // Unload (that is, break root links to) all unmarked classes and | 340 // Unload (that is, break root links to) all unmarked classes and |
331 // loaders. Returns "true" iff something was unloaded. | 341 // loaders. Returns "true" iff something was unloaded. |
332 static bool do_unloading(BoolObjectClosure* is_alive); | 342 static bool do_unloading(BoolObjectClosure* is_alive); |
333 | 343 |
344 // Used by DumpSharedSpaces only to remove classes that failed verification | |
345 static void remove_classes_in_error_state(); | |
346 | |
334 static int calculate_systemdictionary_size(int loadedclasses); | 347 static int calculate_systemdictionary_size(int loadedclasses); |
335 | 348 |
336 // Applies "f->do_oop" to all root oops in the system dictionary. | 349 // Applies "f->do_oop" to all root oops in the system dictionary. |
337 static void oops_do(OopClosure* f); | 350 static void oops_do(OopClosure* f); |
338 static void roots_oops_do(OopClosure* strong, OopClosure* weak); | 351 static void roots_oops_do(OopClosure* strong, OopClosure* weak); |
339 | 352 |
340 // System loader lock | 353 // System loader lock |
341 static oop system_loader_lock() { return _system_loader_lock_obj; } | 354 static oop system_loader_lock() { return _system_loader_lock_obj; } |
342 | 355 |
343 private: | 356 protected: |
344 // Extended Redefine classes support (tbi) | 357 // Extended Redefine classes support (tbi) |
345 static void preloaded_classes_do(KlassClosure* f); | 358 static void preloaded_classes_do(KlassClosure* f); |
346 static void lazily_loaded_classes_do(KlassClosure* f); | 359 static void lazily_loaded_classes_do(KlassClosure* f); |
347 public: | 360 public: |
348 // Sharing support. | 361 // Sharing support. |
351 static void copy_table(char** top, char* end); | 364 static void copy_table(char** top, char* end); |
352 static void reverse(); | 365 static void reverse(); |
353 static void set_shared_dictionary(HashtableBucket<mtClass>* t, int length, | 366 static void set_shared_dictionary(HashtableBucket<mtClass>* t, int length, |
354 int number_of_entries); | 367 int number_of_entries); |
355 // Printing | 368 // Printing |
356 static void print() PRODUCT_RETURN; | 369 static void print(bool details = true); |
370 static void print_shared(bool details = true); | |
357 static void print_class_statistics() PRODUCT_RETURN; | 371 static void print_class_statistics() PRODUCT_RETURN; |
358 static void print_method_statistics() PRODUCT_RETURN; | 372 static void print_method_statistics() PRODUCT_RETURN; |
359 | 373 |
360 // Number of contained klasses | 374 // Number of contained klasses |
361 // This is both fully loaded classes and classes in the process | 375 // This is both fully loaded classes and classes in the process |
437 // The corresponding method to load the class must be called before calling them. | 451 // The corresponding method to load the class must be called before calling them. |
438 static Klass* abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); } | 452 static Klass* abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); } |
439 | 453 |
440 static void load_abstract_ownable_synchronizer_klass(TRAPS); | 454 static void load_abstract_ownable_synchronizer_klass(TRAPS); |
441 | 455 |
442 private: | 456 protected: |
443 // Tells whether ClassLoader.loadClassInternal is present | 457 // Tells whether ClassLoader.loadClassInternal is present |
444 static bool has_loadClassInternal() { return _has_loadClassInternal; } | 458 static bool has_loadClassInternal() { return _has_loadClassInternal; } |
445 | 459 |
446 // Returns the class loader data to be used when looking up/updating the | 460 // Returns the class loader data to be used when looking up/updating the |
447 // system dictionary. | 461 // system dictionary. |
465 // Compute the default system loader | 479 // Compute the default system loader |
466 static void compute_java_system_loader(TRAPS); | 480 static void compute_java_system_loader(TRAPS); |
467 | 481 |
468 // Register a new class loader | 482 // Register a new class loader |
469 static ClassLoaderData* register_loader(Handle class_loader, TRAPS); | 483 static ClassLoaderData* register_loader(Handle class_loader, TRAPS); |
470 private: | 484 protected: |
471 // Mirrors for primitive classes (created eagerly) | 485 // Mirrors for primitive classes (created eagerly) |
472 static oop check_mirror(oop m) { | 486 static oop check_mirror(oop m) { |
473 assert(m != NULL, "mirror not initialized"); | 487 assert(m != NULL, "mirror not initialized"); |
474 return m; | 488 return m; |
475 } | 489 } |
534 // pool entry to a class fails. | 548 // pool entry to a class fails. |
535 static void add_resolution_error(constantPoolHandle pool, int which, Symbol* error); | 549 static void add_resolution_error(constantPoolHandle pool, int which, Symbol* error); |
536 static void delete_resolution_error(ConstantPool* pool); | 550 static void delete_resolution_error(ConstantPool* pool); |
537 static Symbol* find_resolution_error(constantPoolHandle pool, int which); | 551 static Symbol* find_resolution_error(constantPoolHandle pool, int which); |
538 | 552 |
539 private: | 553 protected: |
540 | 554 |
541 enum Constants { | 555 enum Constants { |
542 _loader_constraint_size = 107, // number of entries in constraint table | 556 _loader_constraint_size = 107, // number of entries in constraint table |
543 _resolution_error_size = 107, // number of entries in resolution error table | 557 _resolution_error_size = 107, // number of entries in resolution error table |
544 _invoke_method_size = 139, // number of entries in invoke method table | 558 _invoke_method_size = 139, // number of entries in invoke method table |
585 public: | 599 public: |
586 // for VM_CounterDecay iteration support | 600 // for VM_CounterDecay iteration support |
587 friend class CounterDecay; | 601 friend class CounterDecay; |
588 static Klass* try_get_next_class(); | 602 static Klass* try_get_next_class(); |
589 | 603 |
590 private: | 604 protected: |
591 static void validate_protection_domain(instanceKlassHandle klass, | 605 static void validate_protection_domain(instanceKlassHandle klass, |
592 Handle class_loader, | 606 Handle class_loader, |
593 Handle protection_domain, TRAPS); | 607 Handle protection_domain, TRAPS); |
594 | 608 |
595 friend class VM_PopulateDumpSharedSpace; | 609 friend class VM_PopulateDumpSharedSpace; |
612 static void double_lock_wait(Handle lockObject, TRAPS); | 626 static void double_lock_wait(Handle lockObject, TRAPS); |
613 static void define_instance_class(instanceKlassHandle k, TRAPS); | 627 static void define_instance_class(instanceKlassHandle k, TRAPS); |
614 static instanceKlassHandle find_or_define_instance_class(Symbol* class_name, | 628 static instanceKlassHandle find_or_define_instance_class(Symbol* class_name, |
615 Handle class_loader, | 629 Handle class_loader, |
616 instanceKlassHandle k, TRAPS); | 630 instanceKlassHandle k, TRAPS); |
617 static instanceKlassHandle load_shared_class(Symbol* class_name, | |
618 Handle class_loader, TRAPS); | |
619 static instanceKlassHandle load_shared_class(instanceKlassHandle ik, | 631 static instanceKlassHandle load_shared_class(instanceKlassHandle ik, |
620 Handle class_loader, TRAPS); | 632 Handle class_loader, |
633 Handle protection_domain, | |
634 TRAPS); | |
621 static instanceKlassHandle load_instance_class(Symbol* class_name, Handle class_loader, TRAPS); | 635 static instanceKlassHandle load_instance_class(Symbol* class_name, Handle class_loader, TRAPS); |
622 static Handle compute_loader_lock_object(Handle class_loader, TRAPS); | 636 static Handle compute_loader_lock_object(Handle class_loader, TRAPS); |
623 static void check_loader_lock_contention(Handle loader_lock, TRAPS); | 637 static void check_loader_lock_contention(Handle loader_lock, TRAPS); |
624 static bool is_parallelCapable(Handle class_loader); | 638 static bool is_parallelCapable(Handle class_loader); |
625 static bool is_parallelDefine(Handle class_loader); | 639 static bool is_parallelDefine(Handle class_loader); |
626 | 640 |
627 public: | 641 public: |
642 static instanceKlassHandle load_shared_class(Symbol* class_name, | |
643 Handle class_loader, | |
644 TRAPS); | |
628 static bool is_ext_class_loader(Handle class_loader); | 645 static bool is_ext_class_loader(Handle class_loader); |
629 | 646 |
630 private: | 647 protected: |
631 static Klass* find_shared_class(Symbol* class_name); | 648 static Klass* find_shared_class(Symbol* class_name); |
632 | 649 |
633 // Setup link to hierarchy | 650 // Setup link to hierarchy |
634 static void add_to_hierarchy(instanceKlassHandle k, TRAPS); | 651 static void add_to_hierarchy(instanceKlassHandle k, TRAPS); |
635 | 652 |