< prev index next >

src/share/vm/memory/universe.cpp

Print this page




 118 LatestMethodCache* Universe::_loader_addClass_cache    = NULL;
 119 LatestMethodCache* Universe::_pd_implies_cache         = NULL;
 120 LatestMethodCache* Universe::_throw_illegal_access_error_cache = NULL;
 121 LatestMethodCache* Universe::_do_stack_walk_cache     = NULL;
 122 oop Universe::_out_of_memory_error_java_heap          = NULL;
 123 oop Universe::_out_of_memory_error_metaspace          = NULL;
 124 oop Universe::_out_of_memory_error_class_metaspace    = NULL;
 125 oop Universe::_out_of_memory_error_array_size         = NULL;
 126 oop Universe::_out_of_memory_error_gc_overhead_limit  = NULL;
 127 oop Universe::_out_of_memory_error_realloc_objects    = NULL;
 128 oop Universe::_delayed_stack_overflow_error_message   = NULL;
 129 objArrayOop Universe::_preallocated_out_of_memory_error_array = NULL;
 130 volatile jint Universe::_preallocated_out_of_memory_error_avail_count = 0;
 131 bool Universe::_verify_in_progress                    = false;
 132 long Universe::verify_flags                           = Universe::Verify_All;
 133 oop Universe::_null_ptr_exception_instance            = NULL;
 134 oop Universe::_arithmetic_exception_instance          = NULL;
 135 oop Universe::_virtual_machine_error_instance         = NULL;
 136 oop Universe::_vm_exception                           = NULL;
 137 oop Universe::_allocation_context_notification_obj    = NULL;

 138 
 139 Array<int>* Universe::_the_empty_int_array            = NULL;
 140 Array<u2>* Universe::_the_empty_short_array           = NULL;
 141 Array<Klass*>* Universe::_the_empty_klass_array     = NULL;
 142 Array<Method*>* Universe::_the_empty_method_array   = NULL;
 143 
 144 // These variables are guarded by FullGCALot_lock.
 145 debug_only(objArrayOop Universe::_fullgc_alot_dummy_array = NULL;)
 146 debug_only(int Universe::_fullgc_alot_dummy_next      = 0;)
 147 
 148 // Heap
 149 int             Universe::_verify_count = 0;
 150 
 151 // Oop verification (see MacroAssembler::verify_oop)
 152 uintptr_t       Universe::_verify_oop_mask = 0;
 153 uintptr_t       Universe::_verify_oop_bits = (uintptr_t) -1;
 154 
 155 int             Universe::_base_vtable_size = 0;
 156 bool            Universe::_bootstrapping = false;
 157 bool            Universe::_fully_initialized = false;


 194   assert(_mirrors[0] == NULL && _mirrors[T_BOOLEAN - 1] == NULL, "checking");
 195 
 196   f->do_oop((oop*)&_the_empty_class_klass_array);
 197   f->do_oop((oop*)&_the_null_string);
 198   f->do_oop((oop*)&_the_min_jint_string);
 199   f->do_oop((oop*)&_out_of_memory_error_java_heap);
 200   f->do_oop((oop*)&_out_of_memory_error_metaspace);
 201   f->do_oop((oop*)&_out_of_memory_error_class_metaspace);
 202   f->do_oop((oop*)&_out_of_memory_error_array_size);
 203   f->do_oop((oop*)&_out_of_memory_error_gc_overhead_limit);
 204   f->do_oop((oop*)&_out_of_memory_error_realloc_objects);
 205   f->do_oop((oop*)&_delayed_stack_overflow_error_message);
 206   f->do_oop((oop*)&_preallocated_out_of_memory_error_array);
 207   f->do_oop((oop*)&_null_ptr_exception_instance);
 208   f->do_oop((oop*)&_arithmetic_exception_instance);
 209   f->do_oop((oop*)&_virtual_machine_error_instance);
 210   f->do_oop((oop*)&_main_thread_group);
 211   f->do_oop((oop*)&_system_thread_group);
 212   f->do_oop((oop*)&_vm_exception);
 213   f->do_oop((oop*)&_allocation_context_notification_obj);

 214   debug_only(f->do_oop((oop*)&_fullgc_alot_dummy_array);)
 215 }
 216 
 217 // Serialize metadata in and out of CDS archive, not oops.
 218 void Universe::serialize(SerializeClosure* f, bool do_all) {
 219 
 220   f->do_ptr((void**)&_boolArrayKlassObj);
 221   f->do_ptr((void**)&_byteArrayKlassObj);
 222   f->do_ptr((void**)&_charArrayKlassObj);
 223   f->do_ptr((void**)&_intArrayKlassObj);
 224   f->do_ptr((void**)&_shortArrayKlassObj);
 225   f->do_ptr((void**)&_longArrayKlassObj);
 226   f->do_ptr((void**)&_singleArrayKlassObj);
 227   f->do_ptr((void**)&_doubleArrayKlassObj);
 228   f->do_ptr((void**)&_objectArrayKlassObj);
 229 
 230   {
 231     for (int i = 0; i < T_VOID+1; i++) {
 232       if (_typeArrayKlassObjs[i] != NULL) {
 233         assert(i >= T_BOOLEAN, "checking");


 468   // Bootstrap problem: all classes gets a mirror (java.lang.Class instance) assigned eagerly,
 469   // but we cannot do that for classes created before java.lang.Class is loaded. Here we simply
 470   // walk over permanent objects created so far (mostly classes) and fixup their mirrors. Note
 471   // that the number of objects allocated at this point is very small.
 472   assert(SystemDictionary::Class_klass_loaded(), "java.lang.Class should be loaded");
 473   HandleMark hm(THREAD);
 474   // Cache the start of the static fields
 475   InstanceMirrorKlass::init_offset_of_static_fields();
 476 
 477   GrowableArray <Klass*>* list = java_lang_Class::fixup_mirror_list();
 478   int list_length = list->length();
 479   for (int i = 0; i < list_length; i++) {
 480     Klass* k = list->at(i);
 481     assert(k->is_klass(), "List should only hold classes");
 482     EXCEPTION_MARK;
 483     KlassHandle kh(THREAD, k);
 484     java_lang_Class::fixup_mirror(kh, CATCH);
 485 }
 486   delete java_lang_Class::fixup_mirror_list();
 487   java_lang_Class::set_fixup_mirror_list(NULL);




 488 }
 489 
 490 static bool has_run_finalizers_on_exit = false;
 491 
 492 void Universe::run_finalizers_on_exit() {
 493   if (has_run_finalizers_on_exit) return;
 494   has_run_finalizers_on_exit = true;
 495 
 496   // Called on VM exit. This ought to be run in a separate thread.
 497   log_trace(ref)("Callback to run finalizers on exit");
 498   {
 499     PRESERVE_EXCEPTION_MARK;
 500     KlassHandle finalizer_klass(THREAD, SystemDictionary::Finalizer_klass());
 501     JavaValue result(T_VOID);
 502     JavaCalls::call_static(
 503       &result,
 504       finalizer_klass,
 505       vmSymbols::run_finalizers_on_exit_name(),
 506       vmSymbols::void_method_signature(),
 507       THREAD




 118 LatestMethodCache* Universe::_loader_addClass_cache    = NULL;
 119 LatestMethodCache* Universe::_pd_implies_cache         = NULL;
 120 LatestMethodCache* Universe::_throw_illegal_access_error_cache = NULL;
 121 LatestMethodCache* Universe::_do_stack_walk_cache     = NULL;
 122 oop Universe::_out_of_memory_error_java_heap          = NULL;
 123 oop Universe::_out_of_memory_error_metaspace          = NULL;
 124 oop Universe::_out_of_memory_error_class_metaspace    = NULL;
 125 oop Universe::_out_of_memory_error_array_size         = NULL;
 126 oop Universe::_out_of_memory_error_gc_overhead_limit  = NULL;
 127 oop Universe::_out_of_memory_error_realloc_objects    = NULL;
 128 oop Universe::_delayed_stack_overflow_error_message   = NULL;
 129 objArrayOop Universe::_preallocated_out_of_memory_error_array = NULL;
 130 volatile jint Universe::_preallocated_out_of_memory_error_avail_count = 0;
 131 bool Universe::_verify_in_progress                    = false;
 132 long Universe::verify_flags                           = Universe::Verify_All;
 133 oop Universe::_null_ptr_exception_instance            = NULL;
 134 oop Universe::_arithmetic_exception_instance          = NULL;
 135 oop Universe::_virtual_machine_error_instance         = NULL;
 136 oop Universe::_vm_exception                           = NULL;
 137 oop Universe::_allocation_context_notification_obj    = NULL;
 138 oop Universe::_reference_pending_list                 = NULL;
 139 
 140 Array<int>* Universe::_the_empty_int_array            = NULL;
 141 Array<u2>* Universe::_the_empty_short_array           = NULL;
 142 Array<Klass*>* Universe::_the_empty_klass_array     = NULL;
 143 Array<Method*>* Universe::_the_empty_method_array   = NULL;
 144 
 145 // These variables are guarded by FullGCALot_lock.
 146 debug_only(objArrayOop Universe::_fullgc_alot_dummy_array = NULL;)
 147 debug_only(int Universe::_fullgc_alot_dummy_next      = 0;)
 148 
 149 // Heap
 150 int             Universe::_verify_count = 0;
 151 
 152 // Oop verification (see MacroAssembler::verify_oop)
 153 uintptr_t       Universe::_verify_oop_mask = 0;
 154 uintptr_t       Universe::_verify_oop_bits = (uintptr_t) -1;
 155 
 156 int             Universe::_base_vtable_size = 0;
 157 bool            Universe::_bootstrapping = false;
 158 bool            Universe::_fully_initialized = false;


 195   assert(_mirrors[0] == NULL && _mirrors[T_BOOLEAN - 1] == NULL, "checking");
 196 
 197   f->do_oop((oop*)&_the_empty_class_klass_array);
 198   f->do_oop((oop*)&_the_null_string);
 199   f->do_oop((oop*)&_the_min_jint_string);
 200   f->do_oop((oop*)&_out_of_memory_error_java_heap);
 201   f->do_oop((oop*)&_out_of_memory_error_metaspace);
 202   f->do_oop((oop*)&_out_of_memory_error_class_metaspace);
 203   f->do_oop((oop*)&_out_of_memory_error_array_size);
 204   f->do_oop((oop*)&_out_of_memory_error_gc_overhead_limit);
 205   f->do_oop((oop*)&_out_of_memory_error_realloc_objects);
 206   f->do_oop((oop*)&_delayed_stack_overflow_error_message);
 207   f->do_oop((oop*)&_preallocated_out_of_memory_error_array);
 208   f->do_oop((oop*)&_null_ptr_exception_instance);
 209   f->do_oop((oop*)&_arithmetic_exception_instance);
 210   f->do_oop((oop*)&_virtual_machine_error_instance);
 211   f->do_oop((oop*)&_main_thread_group);
 212   f->do_oop((oop*)&_system_thread_group);
 213   f->do_oop((oop*)&_vm_exception);
 214   f->do_oop((oop*)&_allocation_context_notification_obj);
 215   f->do_oop((oop*)&_reference_pending_list);
 216   debug_only(f->do_oop((oop*)&_fullgc_alot_dummy_array);)
 217 }
 218 
 219 // Serialize metadata in and out of CDS archive, not oops.
 220 void Universe::serialize(SerializeClosure* f, bool do_all) {
 221 
 222   f->do_ptr((void**)&_boolArrayKlassObj);
 223   f->do_ptr((void**)&_byteArrayKlassObj);
 224   f->do_ptr((void**)&_charArrayKlassObj);
 225   f->do_ptr((void**)&_intArrayKlassObj);
 226   f->do_ptr((void**)&_shortArrayKlassObj);
 227   f->do_ptr((void**)&_longArrayKlassObj);
 228   f->do_ptr((void**)&_singleArrayKlassObj);
 229   f->do_ptr((void**)&_doubleArrayKlassObj);
 230   f->do_ptr((void**)&_objectArrayKlassObj);
 231 
 232   {
 233     for (int i = 0; i < T_VOID+1; i++) {
 234       if (_typeArrayKlassObjs[i] != NULL) {
 235         assert(i >= T_BOOLEAN, "checking");


 470   // Bootstrap problem: all classes gets a mirror (java.lang.Class instance) assigned eagerly,
 471   // but we cannot do that for classes created before java.lang.Class is loaded. Here we simply
 472   // walk over permanent objects created so far (mostly classes) and fixup their mirrors. Note
 473   // that the number of objects allocated at this point is very small.
 474   assert(SystemDictionary::Class_klass_loaded(), "java.lang.Class should be loaded");
 475   HandleMark hm(THREAD);
 476   // Cache the start of the static fields
 477   InstanceMirrorKlass::init_offset_of_static_fields();
 478 
 479   GrowableArray <Klass*>* list = java_lang_Class::fixup_mirror_list();
 480   int list_length = list->length();
 481   for (int i = 0; i < list_length; i++) {
 482     Klass* k = list->at(i);
 483     assert(k->is_klass(), "List should only hold classes");
 484     EXCEPTION_MARK;
 485     KlassHandle kh(THREAD, k);
 486     java_lang_Class::fixup_mirror(kh, CATCH);
 487 }
 488   delete java_lang_Class::fixup_mirror_list();
 489   java_lang_Class::set_fixup_mirror_list(NULL);
 490 }
 491 
 492 oop Universe::swap_reference_pending_list(oop list) {
 493   return (oop)Atomic::xchg_ptr(list, &_reference_pending_list);
 494 }
 495 
 496 static bool has_run_finalizers_on_exit = false;
 497 
 498 void Universe::run_finalizers_on_exit() {
 499   if (has_run_finalizers_on_exit) return;
 500   has_run_finalizers_on_exit = true;
 501 
 502   // Called on VM exit. This ought to be run in a separate thread.
 503   log_trace(ref)("Callback to run finalizers on exit");
 504   {
 505     PRESERVE_EXCEPTION_MARK;
 506     KlassHandle finalizer_klass(THREAD, SystemDictionary::Finalizer_klass());
 507     JavaValue result(T_VOID);
 508     JavaCalls::call_static(
 509       &result,
 510       finalizer_klass,
 511       vmSymbols::run_finalizers_on_exit_name(),
 512       vmSymbols::void_method_signature(),
 513       THREAD


< prev index next >