Mercurial > hg > truffle
comparison src/share/vm/memory/universe.cpp @ 20705:d3f3f7677537
6898462: The escape analysis with G1 cause crash assertion src/share/vm/runtime/vframeArray.cpp:94
Summary: OOM during reallocation of scalar replaced objects in deoptimization causes crashes
Reviewed-by: kvn, jrose
author | roland |
---|---|
date | Tue, 25 Nov 2014 17:33:59 +0100 |
parents | b840813adfcc |
children | 7848fc12602b |
comparison
equal
deleted
inserted
replaced
20704:8c08b28b7eee | 20705:d3f3f7677537 |
---|---|
117 oop Universe::_out_of_memory_error_java_heap = NULL; | 117 oop Universe::_out_of_memory_error_java_heap = NULL; |
118 oop Universe::_out_of_memory_error_metaspace = NULL; | 118 oop Universe::_out_of_memory_error_metaspace = NULL; |
119 oop Universe::_out_of_memory_error_class_metaspace = NULL; | 119 oop Universe::_out_of_memory_error_class_metaspace = NULL; |
120 oop Universe::_out_of_memory_error_array_size = NULL; | 120 oop Universe::_out_of_memory_error_array_size = NULL; |
121 oop Universe::_out_of_memory_error_gc_overhead_limit = NULL; | 121 oop Universe::_out_of_memory_error_gc_overhead_limit = NULL; |
122 oop Universe::_out_of_memory_error_realloc_objects = NULL; | |
122 objArrayOop Universe::_preallocated_out_of_memory_error_array = NULL; | 123 objArrayOop Universe::_preallocated_out_of_memory_error_array = NULL; |
123 volatile jint Universe::_preallocated_out_of_memory_error_avail_count = 0; | 124 volatile jint Universe::_preallocated_out_of_memory_error_avail_count = 0; |
124 bool Universe::_verify_in_progress = false; | 125 bool Universe::_verify_in_progress = false; |
125 oop Universe::_null_ptr_exception_instance = NULL; | 126 oop Universe::_null_ptr_exception_instance = NULL; |
126 oop Universe::_arithmetic_exception_instance = NULL; | 127 oop Universe::_arithmetic_exception_instance = NULL; |
188 f->do_oop((oop*)&_out_of_memory_error_java_heap); | 189 f->do_oop((oop*)&_out_of_memory_error_java_heap); |
189 f->do_oop((oop*)&_out_of_memory_error_metaspace); | 190 f->do_oop((oop*)&_out_of_memory_error_metaspace); |
190 f->do_oop((oop*)&_out_of_memory_error_class_metaspace); | 191 f->do_oop((oop*)&_out_of_memory_error_class_metaspace); |
191 f->do_oop((oop*)&_out_of_memory_error_array_size); | 192 f->do_oop((oop*)&_out_of_memory_error_array_size); |
192 f->do_oop((oop*)&_out_of_memory_error_gc_overhead_limit); | 193 f->do_oop((oop*)&_out_of_memory_error_gc_overhead_limit); |
194 f->do_oop((oop*)&_out_of_memory_error_realloc_objects); | |
193 f->do_oop((oop*)&_preallocated_out_of_memory_error_array); | 195 f->do_oop((oop*)&_preallocated_out_of_memory_error_array); |
194 f->do_oop((oop*)&_null_ptr_exception_instance); | 196 f->do_oop((oop*)&_null_ptr_exception_instance); |
195 f->do_oop((oop*)&_arithmetic_exception_instance); | 197 f->do_oop((oop*)&_arithmetic_exception_instance); |
196 f->do_oop((oop*)&_virtual_machine_error_instance); | 198 f->do_oop((oop*)&_virtual_machine_error_instance); |
197 f->do_oop((oop*)&_main_thread_group); | 199 f->do_oop((oop*)&_main_thread_group); |
572 // to allocate the backtrace. | 574 // to allocate the backtrace. |
573 return ((throwable() != Universe::_out_of_memory_error_java_heap) && | 575 return ((throwable() != Universe::_out_of_memory_error_java_heap) && |
574 (throwable() != Universe::_out_of_memory_error_metaspace) && | 576 (throwable() != Universe::_out_of_memory_error_metaspace) && |
575 (throwable() != Universe::_out_of_memory_error_class_metaspace) && | 577 (throwable() != Universe::_out_of_memory_error_class_metaspace) && |
576 (throwable() != Universe::_out_of_memory_error_array_size) && | 578 (throwable() != Universe::_out_of_memory_error_array_size) && |
577 (throwable() != Universe::_out_of_memory_error_gc_overhead_limit)); | 579 (throwable() != Universe::_out_of_memory_error_gc_overhead_limit) && |
580 (throwable() != Universe::_out_of_memory_error_realloc_objects)); | |
578 } | 581 } |
579 | 582 |
580 | 583 |
581 oop Universe::gen_out_of_memory_error(oop default_err) { | 584 oop Universe::gen_out_of_memory_error(oop default_err) { |
582 // generate an out of memory error: | 585 // generate an out of memory error: |
1042 Universe::_out_of_memory_error_metaspace = k_h->allocate_instance(CHECK_false); | 1045 Universe::_out_of_memory_error_metaspace = k_h->allocate_instance(CHECK_false); |
1043 Universe::_out_of_memory_error_class_metaspace = k_h->allocate_instance(CHECK_false); | 1046 Universe::_out_of_memory_error_class_metaspace = k_h->allocate_instance(CHECK_false); |
1044 Universe::_out_of_memory_error_array_size = k_h->allocate_instance(CHECK_false); | 1047 Universe::_out_of_memory_error_array_size = k_h->allocate_instance(CHECK_false); |
1045 Universe::_out_of_memory_error_gc_overhead_limit = | 1048 Universe::_out_of_memory_error_gc_overhead_limit = |
1046 k_h->allocate_instance(CHECK_false); | 1049 k_h->allocate_instance(CHECK_false); |
1050 Universe::_out_of_memory_error_realloc_objects = k_h->allocate_instance(CHECK_false); | |
1047 | 1051 |
1048 // Setup preallocated NullPointerException | 1052 // Setup preallocated NullPointerException |
1049 // (this is currently used for a cheap & dirty solution in compiler exception handling) | 1053 // (this is currently used for a cheap & dirty solution in compiler exception handling) |
1050 k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_NullPointerException(), true, CHECK_false); | 1054 k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_NullPointerException(), true, CHECK_false); |
1051 Universe::_null_ptr_exception_instance = InstanceKlass::cast(k)->allocate_instance(CHECK_false); | 1055 Universe::_null_ptr_exception_instance = InstanceKlass::cast(k)->allocate_instance(CHECK_false); |
1081 java_lang_Throwable::set_message(Universe::_out_of_memory_error_array_size, msg()); | 1085 java_lang_Throwable::set_message(Universe::_out_of_memory_error_array_size, msg()); |
1082 | 1086 |
1083 msg = java_lang_String::create_from_str("GC overhead limit exceeded", CHECK_false); | 1087 msg = java_lang_String::create_from_str("GC overhead limit exceeded", CHECK_false); |
1084 java_lang_Throwable::set_message(Universe::_out_of_memory_error_gc_overhead_limit, msg()); | 1088 java_lang_Throwable::set_message(Universe::_out_of_memory_error_gc_overhead_limit, msg()); |
1085 | 1089 |
1090 msg = java_lang_String::create_from_str("Java heap space: failed reallocation of scalar replaced objects", CHECK_false); | |
1091 java_lang_Throwable::set_message(Universe::_out_of_memory_error_realloc_objects, msg()); | |
1092 | |
1086 msg = java_lang_String::create_from_str("/ by zero", CHECK_false); | 1093 msg = java_lang_String::create_from_str("/ by zero", CHECK_false); |
1087 java_lang_Throwable::set_message(Universe::_arithmetic_exception_instance, msg()); | 1094 java_lang_Throwable::set_message(Universe::_arithmetic_exception_instance, msg()); |
1088 | 1095 |
1089 // Setup the array of errors that have preallocated backtrace | 1096 // Setup the array of errors that have preallocated backtrace |
1090 k = Universe::_out_of_memory_error_java_heap->klass(); | 1097 k = Universe::_out_of_memory_error_java_heap->klass(); |