Mon, 29 Jun 2009 14:42:12 -0700
6850957: Honor -XX:OnOutOfMemoryError when array size exceeds VM limit
Summary: call report_java_out_of_memory("Requested array size exceeds VM limit")
Reviewed-by: tbell, dholmes, alanb, ysr
Contributed-by: jeremymanson@google.com
1.1 --- a/src/share/vm/oops/arrayKlass.cpp Fri Jul 10 11:10:00 2009 -0700 1.2 +++ b/src/share/vm/oops/arrayKlass.cpp Mon Jun 29 14:42:12 2009 -0700 1.3 @@ -140,6 +140,7 @@ 1.4 THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); 1.5 } 1.6 if (length > arrayOopDesc::max_array_length(T_ARRAY)) { 1.7 + report_java_out_of_memory("Requested array size exceeds VM limit"); 1.8 THROW_OOP_0(Universe::out_of_memory_error_array_size()); 1.9 } 1.10 int size = objArrayOopDesc::object_size(length);
2.1 --- a/src/share/vm/oops/instanceKlass.cpp Fri Jul 10 11:10:00 2009 -0700 2.2 +++ b/src/share/vm/oops/instanceKlass.cpp Mon Jun 29 14:42:12 2009 -0700 2.3 @@ -508,6 +508,7 @@ 2.4 objArrayOop instanceKlass::allocate_objArray(int n, int length, TRAPS) { 2.5 if (length < 0) THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); 2.6 if (length > arrayOopDesc::max_array_length(T_OBJECT)) { 2.7 + report_java_out_of_memory("Requested array size exceeds VM limit"); 2.8 THROW_OOP_0(Universe::out_of_memory_error_array_size()); 2.9 } 2.10 int size = objArrayOopDesc::object_size(length);
3.1 --- a/src/share/vm/oops/objArrayKlass.cpp Fri Jul 10 11:10:00 2009 -0700 3.2 +++ b/src/share/vm/oops/objArrayKlass.cpp Mon Jun 29 14:42:12 2009 -0700 3.3 @@ -39,6 +39,7 @@ 3.4 assert(a->is_parsable(), "Can't publish unless parsable"); 3.5 return a; 3.6 } else { 3.7 + report_java_out_of_memory("Requested array size exceeds VM limit"); 3.8 THROW_OOP_0(Universe::out_of_memory_error_array_size()); 3.9 } 3.10 } else {
4.1 --- a/src/share/vm/oops/typeArrayKlass.cpp Fri Jul 10 11:10:00 2009 -0700 4.2 +++ b/src/share/vm/oops/typeArrayKlass.cpp Mon Jun 29 14:42:12 2009 -0700 4.3 @@ -80,6 +80,7 @@ 4.4 assert(t->is_parsable(), "Don't publish unless parsable"); 4.5 return t; 4.6 } else { 4.7 + report_java_out_of_memory("Requested array size exceeds VM limit"); 4.8 THROW_OOP_0(Universe::out_of_memory_error_array_size()); 4.9 } 4.10 } else {