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
|