Tengo un hilo en una aplicación web Java que causa un java.lang.OutOfMemoryError: excepción de espacio en montón Java, pero el bloque try/catch no capta el error.¿Por qué no se detecta "java.lang.OutOfMemoryError: espacio de almacenamiento dinámico de Java"?
Código de ejemplo:
private void doSomeWork()
{
try
{
processData(); //Causes OutOfMemoryError
System.out.println("This line does not execute");
}
catch (Exception e)
{
System.out.println("Exception. This line does not execute.");
//Log error
}
finally
{
System.out.println("finally. This line does execute");
System.out.println("Thread name: " + Thread.currentThread().getName());
}
}
Salida:
finally. This line does execute Thread name: _Worker-8 Exception in thread "_Worker-8" java.lang.OutOfMemoryError: Java heap space ...
Antecedentes:
Hace poco se hizo cargo de este proyecto Java y estoy tratando de levantarse para acelerar con Java y este proyecto. Soy un desarrollador de C#, por lo que aún no estoy familiarizado con este proyecto o Java. Sé que puedo solucionar el error usando la configuración -Xmx, pero estoy interesado en detectar este error para poder registrarlo. El error no se muestra en ninguno de los archivos de registro, y la salida se muestra en la consola en modo de depuración en Eclipse.
Agradable Respuesta con referencias de enlace. Lo aprecio, gracias! – Crispy
Recomendaría atrapar throwables en la parte más externa de su aplicación (o en la parte más externa de un método de subproceso) para que pueda saber por qué su programa ha abortado (si no hay nadie más que lo haga por usted)) –