comparison src/share/vm/memory/universe.cpp @ 6751:2a48c84f1d04

7197269: NPG: FollowReferences has no ClassLoader -> Class link to follow Summary: restore java/lang/ClassLoader.addClass() upcall Reviewed-by: sspitsyn, dcubed, jmasa
author coleenp
date Mon, 17 Sep 2012 10:46:59 -0400
parents 11fb740ce98f
children d8ce2825b193 8e47bac5643a fb19af007ffc
comparison
equal deleted inserted replaced
6750:859cd1a76f8a 6751:2a48c84f1d04
115 objArrayOop Universe::_the_empty_class_klass_array = NULL; 115 objArrayOop Universe::_the_empty_class_klass_array = NULL;
116 Array<Klass*>* Universe::_the_array_interfaces_array = NULL; 116 Array<Klass*>* Universe::_the_array_interfaces_array = NULL;
117 oop Universe::_the_null_string = NULL; 117 oop Universe::_the_null_string = NULL;
118 oop Universe::_the_min_jint_string = NULL; 118 oop Universe::_the_min_jint_string = NULL;
119 LatestMethodOopCache* Universe::_finalizer_register_cache = NULL; 119 LatestMethodOopCache* Universe::_finalizer_register_cache = NULL;
120 LatestMethodOopCache* Universe::_loader_addClass_cache = NULL;
120 ActiveMethodOopsCache* Universe::_reflect_invoke_cache = NULL; 121 ActiveMethodOopsCache* Universe::_reflect_invoke_cache = NULL;
121 oop Universe::_out_of_memory_error_java_heap = NULL; 122 oop Universe::_out_of_memory_error_java_heap = NULL;
122 oop Universe::_out_of_memory_error_perm_gen = NULL; 123 oop Universe::_out_of_memory_error_perm_gen = NULL;
123 oop Universe::_out_of_memory_error_array_size = NULL; 124 oop Universe::_out_of_memory_error_array_size = NULL;
124 oop Universe::_out_of_memory_error_gc_overhead_limit = NULL; 125 oop Universe::_out_of_memory_error_gc_overhead_limit = NULL;
226 f->do_ptr((void**)&_the_empty_int_array); 227 f->do_ptr((void**)&_the_empty_int_array);
227 f->do_ptr((void**)&_the_empty_short_array); 228 f->do_ptr((void**)&_the_empty_short_array);
228 f->do_ptr((void**)&_the_empty_method_array); 229 f->do_ptr((void**)&_the_empty_method_array);
229 f->do_ptr((void**)&_the_empty_klass_array); 230 f->do_ptr((void**)&_the_empty_klass_array);
230 _finalizer_register_cache->serialize(f); 231 _finalizer_register_cache->serialize(f);
232 _loader_addClass_cache->serialize(f);
231 _reflect_invoke_cache->serialize(f); 233 _reflect_invoke_cache->serialize(f);
232 } 234 }
233 235
234 void Universe::check_alignment(uintx size, uintx alignment, const char* name) { 236 void Universe::check_alignment(uintx size, uintx alignment, const char* name) {
235 if (size < alignment || size % alignment != 0) { 237 if (size < alignment || size % alignment != 0) {
650 ClassLoaderData::init_null_class_loader_data(); 652 ClassLoaderData::init_null_class_loader_data();
651 653
652 // We have a heap so create the Method* caches before 654 // We have a heap so create the Method* caches before
653 // Metaspace::initialize_shared_spaces() tries to populate them. 655 // Metaspace::initialize_shared_spaces() tries to populate them.
654 Universe::_finalizer_register_cache = new LatestMethodOopCache(); 656 Universe::_finalizer_register_cache = new LatestMethodOopCache();
657 Universe::_loader_addClass_cache = new LatestMethodOopCache();
655 Universe::_reflect_invoke_cache = new ActiveMethodOopsCache(); 658 Universe::_reflect_invoke_cache = new ActiveMethodOopsCache();
656 659
657 if (UseSharedSpaces) { 660 if (UseSharedSpaces) {
658 // Read the data structures supporting the shared spaces (shared 661 // Read the data structures supporting the shared spaces (shared
659 // system dictionary, symbol table, etc.). After that, access to 662 // system dictionary, symbol table, etc.). After that, access to
1039 THROW_MSG_(vmSymbols::java_lang_NoSuchMethodException(), 1042 THROW_MSG_(vmSymbols::java_lang_NoSuchMethodException(),
1040 "java.lang.reflect.Method.invoke", false); 1043 "java.lang.reflect.Method.invoke", false);
1041 } 1044 }
1042 Universe::_reflect_invoke_cache->init(k_h(), m, CHECK_false); 1045 Universe::_reflect_invoke_cache->init(k_h(), m, CHECK_false);
1043 1046
1047 // Setup method for registering loaded classes in class loader vector
1048 InstanceKlass::cast(SystemDictionary::ClassLoader_klass())->link_class(CHECK_false);
1049 m = InstanceKlass::cast(SystemDictionary::ClassLoader_klass())->find_method(vmSymbols::addClass_name(), vmSymbols::class_void_signature());
1050 if (m == NULL || m->is_static()) {
1051 THROW_MSG_(vmSymbols::java_lang_NoSuchMethodException(),
1052 "java.lang.ClassLoader.addClass", false);
1053 }
1054 Universe::_loader_addClass_cache->init(
1055 SystemDictionary::ClassLoader_klass(), m, CHECK_false);
1056
1044 // The folowing is initializing converter functions for serialization in 1057 // The folowing is initializing converter functions for serialization in
1045 // JVM.cpp. If we clean up the StrictMath code above we may want to find 1058 // JVM.cpp. If we clean up the StrictMath code above we may want to find
1046 // a better solution for this as well. 1059 // a better solution for this as well.
1047 initialize_converter_functions(); 1060 initialize_converter_functions();
1048 1061