< prev index next >
src/hotspot/share/gc/shared/memAllocator.cpp
Print this page
@@ -118,31 +118,26 @@
if (obj() != NULL) {
return false;
}
- if (!_overhead_limit_exceeded) {
+ const char* message = _overhead_limit_exceeded ? "GC overhead limit exceeded" : "Java heap space";
+ if (!THREAD->in_retryable_allocation()) {
// -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support
- report_java_out_of_memory("Java heap space");
+ report_java_out_of_memory(message);
if (JvmtiExport::should_post_resource_exhausted()) {
JvmtiExport::post_resource_exhausted(
JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR | JVMTI_RESOURCE_EXHAUSTED_JAVA_HEAP,
- "Java heap space");
+ message);
}
- THROW_OOP_(Universe::out_of_memory_error_java_heap(), true);
+ oop exception = _overhead_limit_exceeded ?
+ Universe::out_of_memory_error_gc_overhead_limit() :
+ Universe::out_of_memory_error_java_heap();
+ THROW_OOP_(exception, true);
} else {
- // -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support
- report_java_out_of_memory("GC overhead limit exceeded");
-
- if (JvmtiExport::should_post_resource_exhausted()) {
- JvmtiExport::post_resource_exhausted(
- JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR | JVMTI_RESOURCE_EXHAUSTED_JAVA_HEAP,
- "GC overhead limit exceeded");
- }
-
- THROW_OOP_(Universe::out_of_memory_error_gc_overhead_limit(), true);
+ THROW_OOP_(Universe::out_of_memory_error_retry(), true);
}
}
void MemAllocator::Allocation::verify_before() {
// Clear unhandled oops for memory allocation. Memory allocation might
< prev index next >