一般建议是,除非在特殊情况下,否则不应捕获 java.lang.Error,请参阅捕获 Throwable 是否是一种不好的做法?例如。
我的情况是我有一个程序有时会耗尽内存并抛出 java.lang.OutOfMemoryError。尽管无法从中恢复,但我确实想知道它发生了,所以我希望在日志中看到一些东西和一个非零退出代码。那么这样的事情是否值得建议?
public static void main(String[] args)
{
try
{
...
}
catch (Exception e)
{
e.printStackTrace();
System.exit(1);
}
catch (OutOfMemoryError e)
{
e.printStackTrace();
System.exit(1);
}
}
另一个程序是类似的,只是它可能是一个消耗所有内存的特定线程。在这种情况下,如果该线程退出,则可以继续处理,我真正想要的只是查看日志并最终获得非零退出代码。那么我应该在那个线程运行方法中捕获 OutOfMemoryError 吗?