Java 如果我想从遗留代码中删除catch(Throwable t)子句,我应该注意什么?
如果我删除这样的捕获,那么JVM/Tomcat会有什么样的行为?我对容器线程和非容器管理线程都感兴趣,代码只是一个示例。不捕捉错误的副作用真的会造成伤害吗?当然,在catch子句中没有正确处理错误 示例代码:Java 如果我想从遗留代码中删除catch(Throwable t)子句,我应该注意什么?,java,tomcat,jvm,Java,Tomcat,Jvm,如果我删除这样的捕获,那么JVM/Tomcat会有什么样的行为?我对容器线程和非容器管理线程都感兴趣,代码只是一个示例。不捕捉错误的副作用真的会造成伤害吗?当然,在catch子句中没有正确处理错误 示例代码: 如果删除这样的捕获,运行的线程将由于未捕获的异常而终止。在您的示例中,行System.out.println(“内存不足后”)根本不会被打印 如果有注册,他们将被调用 在Tomcat中,用户将获得一个错误页面,具体取决于web.xml中配置的内容。如果它是默认的错误页面,则会打印完整的堆栈
如果删除这样的捕获,运行的线程将由于未捕获的异常而终止。在您的示例中,行
System.out.println(“内存不足后”)代码>根本不会被打印
如果有注册,他们将被调用
在Tomcat中,用户将获得一个错误页面,具体取决于web.xml中配置的内容。如果它是默认的错误页面,则会打印完整的堆栈跟踪,这可能会显示敏感信息。很多,但有一件事会让人想到:捕获InterruptedException并吞下它,而无需重新设置线程的interrupted标志。很好的一点,将其添加到这些子句中是一个很好的改进,谢谢。
new Thread() {
public void run() {
try{
//Out of memory simulated
int MAX = (int)Integer.MAX_VALUE;
int[][][] aryNumbers = new int[MAX][MAX][MAX];
}catch (Throwable t){
//OOM not handled here, just empty catch clause
System.out.println("Out of Memory");
}
System.out.println("After Out of Memory");
//other valuable instructions
}
};