comparison src/share/vm/memory/universe.cpp @ 1142:4ce7240d622c

6914300: ciEnv should export all well known classes Reviewed-by: kvn, twisti
author never
date Wed, 06 Jan 2010 14:22:39 -0800
parents 7c57aead6d3e
children cd5dbf694d45
comparison
equal deleted inserted replaced
1140:1f6d42899c3a 1142:4ce7240d622c
289 289
290 vmSymbols::initialize(CHECK); 290 vmSymbols::initialize(CHECK);
291 291
292 SystemDictionary::initialize(CHECK); 292 SystemDictionary::initialize(CHECK);
293 293
294 klassOop ok = SystemDictionary::object_klass(); 294 klassOop ok = SystemDictionary::Object_klass();
295 295
296 _the_null_string = StringTable::intern("null", CHECK); 296 _the_null_string = StringTable::intern("null", CHECK);
297 _the_min_jint_string = StringTable::intern("-2147483648", CHECK); 297 _the_min_jint_string = StringTable::intern("-2147483648", CHECK);
298 298
299 if (UseSharedSpaces) { 299 if (UseSharedSpaces) {
300 // Verify shared interfaces array. 300 // Verify shared interfaces array.
301 assert(_the_array_interfaces_array->obj_at(0) == 301 assert(_the_array_interfaces_array->obj_at(0) ==
302 SystemDictionary::cloneable_klass(), "u3"); 302 SystemDictionary::Cloneable_klass(), "u3");
303 assert(_the_array_interfaces_array->obj_at(1) == 303 assert(_the_array_interfaces_array->obj_at(1) ==
304 SystemDictionary::serializable_klass(), "u3"); 304 SystemDictionary::Serializable_klass(), "u3");
305 305
306 // Verify element klass for system obj array klass 306 // Verify element klass for system obj array klass
307 assert(objArrayKlass::cast(_systemObjArrayKlassObj)->element_klass() == ok, "u1"); 307 assert(objArrayKlass::cast(_systemObjArrayKlassObj)->element_klass() == ok, "u1");
308 assert(objArrayKlass::cast(_systemObjArrayKlassObj)->bottom_klass() == ok, "u2"); 308 assert(objArrayKlass::cast(_systemObjArrayKlassObj)->bottom_klass() == ok, "u2");
309 309
318 assert(Klass::cast(longArrayKlassObj() )->super() == ok, "u3"); 318 assert(Klass::cast(longArrayKlassObj() )->super() == ok, "u3");
319 assert(Klass::cast(constantPoolKlassObj() )->super() == ok, "u3"); 319 assert(Klass::cast(constantPoolKlassObj() )->super() == ok, "u3");
320 assert(Klass::cast(systemObjArrayKlassObj())->super() == ok, "u3"); 320 assert(Klass::cast(systemObjArrayKlassObj())->super() == ok, "u3");
321 } else { 321 } else {
322 // Set up shared interfaces array. (Do this before supers are set up.) 322 // Set up shared interfaces array. (Do this before supers are set up.)
323 _the_array_interfaces_array->obj_at_put(0, SystemDictionary::cloneable_klass()); 323 _the_array_interfaces_array->obj_at_put(0, SystemDictionary::Cloneable_klass());
324 _the_array_interfaces_array->obj_at_put(1, SystemDictionary::serializable_klass()); 324 _the_array_interfaces_array->obj_at_put(1, SystemDictionary::Serializable_klass());
325 325
326 // Set element klass for system obj array klass 326 // Set element klass for system obj array klass
327 objArrayKlass::cast(_systemObjArrayKlassObj)->set_element_klass(ok); 327 objArrayKlass::cast(_systemObjArrayKlassObj)->set_element_klass(ok);
328 objArrayKlass::cast(_systemObjArrayKlassObj)->set_bottom_klass(ok); 328 objArrayKlass::cast(_systemObjArrayKlassObj)->set_bottom_klass(ok);
329 329
363 } // end of core bootstrapping 363 } // end of core bootstrapping
364 364
365 // Initialize _objectArrayKlass after core bootstraping to make 365 // Initialize _objectArrayKlass after core bootstraping to make
366 // sure the super class is set up properly for _objectArrayKlass. 366 // sure the super class is set up properly for _objectArrayKlass.
367 _objectArrayKlassObj = instanceKlass:: 367 _objectArrayKlassObj = instanceKlass::
368 cast(SystemDictionary::object_klass())->array_klass(1, CHECK); 368 cast(SystemDictionary::Object_klass())->array_klass(1, CHECK);
369 // Add the class to the class hierarchy manually to make sure that 369 // Add the class to the class hierarchy manually to make sure that
370 // its vtable is initialized after core bootstrapping is completed. 370 // its vtable is initialized after core bootstrapping is completed.
371 Klass::cast(_objectArrayKlassObj)->append_to_sibling_list(); 371 Klass::cast(_objectArrayKlassObj)->append_to_sibling_list();
372 372
373 // Compute is_jdk version flags. 373 // Compute is_jdk version flags.
424 objArrayHandle dummy_array(THREAD, naked_array); 424 objArrayHandle dummy_array(THREAD, naked_array);
425 int i = 0; 425 int i = 0;
426 while (i < size) { 426 while (i < size) {
427 if (!UseConcMarkSweepGC) { 427 if (!UseConcMarkSweepGC) {
428 // Allocate dummy in old generation 428 // Allocate dummy in old generation
429 oop dummy = instanceKlass::cast(SystemDictionary::object_klass())->allocate_instance(CHECK); 429 oop dummy = instanceKlass::cast(SystemDictionary::Object_klass())->allocate_instance(CHECK);
430 dummy_array->obj_at_put(i++, dummy); 430 dummy_array->obj_at_put(i++, dummy);
431 } 431 }
432 // Allocate dummy in permanent generation 432 // Allocate dummy in permanent generation
433 oop dummy = instanceKlass::cast(SystemDictionary::object_klass())->allocate_permanent_instance(CHECK); 433 oop dummy = instanceKlass::cast(SystemDictionary::Object_klass())->allocate_permanent_instance(CHECK);
434 dummy_array->obj_at_put(i++, dummy); 434 dummy_array->obj_at_put(i++, dummy);
435 } 435 }
436 { 436 {
437 // Only modify the global variable inside the mutex. 437 // Only modify the global variable inside the mutex.
438 // If we had a race to here, the other dummy_array instances 438 // If we had a race to here, the other dummy_array instances
538 void Universe::fixup_mirrors(TRAPS) { 538 void Universe::fixup_mirrors(TRAPS) {
539 // Bootstrap problem: all classes gets a mirror (java.lang.Class instance) assigned eagerly, 539 // Bootstrap problem: all classes gets a mirror (java.lang.Class instance) assigned eagerly,
540 // but we cannot do that for classes created before java.lang.Class is loaded. Here we simply 540 // but we cannot do that for classes created before java.lang.Class is loaded. Here we simply
541 // walk over permanent objects created so far (mostly classes) and fixup their mirrors. Note 541 // walk over permanent objects created so far (mostly classes) and fixup their mirrors. Note
542 // that the number of objects allocated at this point is very small. 542 // that the number of objects allocated at this point is very small.
543 assert(SystemDictionary::class_klass_loaded(), "java.lang.Class should be loaded"); 543 assert(SystemDictionary::Class_klass_loaded(), "java.lang.Class should be loaded");
544 FixupMirrorClosure blk; 544 FixupMirrorClosure blk;
545 Universe::heap()->permanent_object_iterate(&blk); 545 Universe::heap()->permanent_object_iterate(&blk);
546 } 546 }
547 547
548 548
554 554
555 // Called on VM exit. This ought to be run in a separate thread. 555 // Called on VM exit. This ought to be run in a separate thread.
556 if (TraceReferenceGC) tty->print_cr("Callback to run finalizers on exit"); 556 if (TraceReferenceGC) tty->print_cr("Callback to run finalizers on exit");
557 { 557 {
558 PRESERVE_EXCEPTION_MARK; 558 PRESERVE_EXCEPTION_MARK;
559 KlassHandle finalizer_klass(THREAD, SystemDictionary::finalizer_klass()); 559 KlassHandle finalizer_klass(THREAD, SystemDictionary::Finalizer_klass());
560 JavaValue result(T_VOID); 560 JavaValue result(T_VOID);
561 JavaCalls::call_static( 561 JavaCalls::call_static(
562 &result, 562 &result,
563 finalizer_klass, 563 finalizer_klass,
564 vmSymbolHandles::run_finalizers_on_exit_name(), 564 vmSymbolHandles::run_finalizers_on_exit_name(),
948 Universe::_fully_initialized = true; 948 Universe::_fully_initialized = true;
949 EXCEPTION_MARK; 949 EXCEPTION_MARK;
950 { ResourceMark rm; 950 { ResourceMark rm;
951 Interpreter::initialize(); // needed for interpreter entry points 951 Interpreter::initialize(); // needed for interpreter entry points
952 if (!UseSharedSpaces) { 952 if (!UseSharedSpaces) {
953 KlassHandle ok_h(THREAD, SystemDictionary::object_klass()); 953 KlassHandle ok_h(THREAD, SystemDictionary::Object_klass());
954 Universe::reinitialize_vtable_of(ok_h, CHECK_false); 954 Universe::reinitialize_vtable_of(ok_h, CHECK_false);
955 Universe::reinitialize_itables(CHECK_false); 955 Universe::reinitialize_itables(CHECK_false);
956 } 956 }
957 } 957 }
958 958
959 klassOop k; 959 klassOop k;
960 instanceKlassHandle k_h; 960 instanceKlassHandle k_h;
961 if (!UseSharedSpaces) { 961 if (!UseSharedSpaces) {
962 // Setup preallocated empty java.lang.Class array 962 // Setup preallocated empty java.lang.Class array
963 Universe::_the_empty_class_klass_array = oopFactory::new_objArray(SystemDictionary::class_klass(), 0, CHECK_false); 963 Universe::_the_empty_class_klass_array = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_false);
964 // Setup preallocated OutOfMemoryError errors 964 // Setup preallocated OutOfMemoryError errors
965 k = SystemDictionary::resolve_or_fail(vmSymbolHandles::java_lang_OutOfMemoryError(), true, CHECK_false); 965 k = SystemDictionary::resolve_or_fail(vmSymbolHandles::java_lang_OutOfMemoryError(), true, CHECK_false);
966 k_h = instanceKlassHandle(THREAD, k); 966 k_h = instanceKlassHandle(THREAD, k);
967 Universe::_out_of_memory_error_java_heap = k_h->allocate_permanent_instance(CHECK_false); 967 Universe::_out_of_memory_error_java_heap = k_h->allocate_permanent_instance(CHECK_false);
968 Universe::_out_of_memory_error_perm_gen = k_h->allocate_permanent_instance(CHECK_false); 968 Universe::_out_of_memory_error_perm_gen = k_h->allocate_permanent_instance(CHECK_false);
1025 1025
1026 1026
1027 // Setup static method for registering finalizers 1027 // Setup static method for registering finalizers
1028 // The finalizer klass must be linked before looking up the method, in 1028 // The finalizer klass must be linked before looking up the method, in
1029 // case it needs to get rewritten. 1029 // case it needs to get rewritten.
1030 instanceKlass::cast(SystemDictionary::finalizer_klass())->link_class(CHECK_false); 1030 instanceKlass::cast(SystemDictionary::Finalizer_klass())->link_class(CHECK_false);
1031 methodOop m = instanceKlass::cast(SystemDictionary::finalizer_klass())->find_method( 1031 methodOop m = instanceKlass::cast(SystemDictionary::Finalizer_klass())->find_method(
1032 vmSymbols::register_method_name(), 1032 vmSymbols::register_method_name(),
1033 vmSymbols::register_method_signature()); 1033 vmSymbols::register_method_signature());
1034 if (m == NULL || !m->is_static()) { 1034 if (m == NULL || !m->is_static()) {
1035 THROW_MSG_(vmSymbols::java_lang_NoSuchMethodException(), 1035 THROW_MSG_(vmSymbols::java_lang_NoSuchMethodException(),
1036 "java.lang.ref.Finalizer.register", false); 1036 "java.lang.ref.Finalizer.register", false);
1037 } 1037 }
1038 Universe::_finalizer_register_cache->init( 1038 Universe::_finalizer_register_cache->init(
1039 SystemDictionary::finalizer_klass(), m, CHECK_false); 1039 SystemDictionary::Finalizer_klass(), m, CHECK_false);
1040 1040
1041 // Resolve on first use and initialize class. 1041 // Resolve on first use and initialize class.
1042 // Note: No race-condition here, since a resolve will always return the same result 1042 // Note: No race-condition here, since a resolve will always return the same result
1043 1043
1044 // Setup method for security checks 1044 // Setup method for security checks
1051 "java.lang.reflect.Method.invoke", false); 1051 "java.lang.reflect.Method.invoke", false);
1052 } 1052 }
1053 Universe::_reflect_invoke_cache->init(k_h(), m, CHECK_false); 1053 Universe::_reflect_invoke_cache->init(k_h(), m, CHECK_false);
1054 1054
1055 // Setup method for registering loaded classes in class loader vector 1055 // Setup method for registering loaded classes in class loader vector
1056 instanceKlass::cast(SystemDictionary::classloader_klass())->link_class(CHECK_false); 1056 instanceKlass::cast(SystemDictionary::ClassLoader_klass())->link_class(CHECK_false);
1057 m = instanceKlass::cast(SystemDictionary::classloader_klass())->find_method(vmSymbols::addClass_name(), vmSymbols::class_void_signature()); 1057 m = instanceKlass::cast(SystemDictionary::ClassLoader_klass())->find_method(vmSymbols::addClass_name(), vmSymbols::class_void_signature());
1058 if (m == NULL || m->is_static()) { 1058 if (m == NULL || m->is_static()) {
1059 THROW_MSG_(vmSymbols::java_lang_NoSuchMethodException(), 1059 THROW_MSG_(vmSymbols::java_lang_NoSuchMethodException(),
1060 "java.lang.ClassLoader.addClass", false); 1060 "java.lang.ClassLoader.addClass", false);
1061 } 1061 }
1062 Universe::_loader_addClass_cache->init( 1062 Universe::_loader_addClass_cache->init(
1063 SystemDictionary::classloader_klass(), m, CHECK_false); 1063 SystemDictionary::ClassLoader_klass(), m, CHECK_false);
1064 1064
1065 // The folowing is initializing converter functions for serialization in 1065 // The folowing is initializing converter functions for serialization in
1066 // JVM.cpp. If we clean up the StrictMath code above we may want to find 1066 // JVM.cpp. If we clean up the StrictMath code above we may want to find
1067 // a better solution for this as well. 1067 // a better solution for this as well.
1068 initialize_converter_functions(); 1068 initialize_converter_functions();