只是好奇而已。In an answer关于捕获StackOverflowErrors有人写道:“肯定有这样的情况,堆栈溢出可能会使应用程序不一致,就像内存耗尽一样。”StackOverflowErrors有什么特别之处,以至于它们威胁要破坏应用程序的状态,而不是在出现错误的情况下抛出NullPointerException?我能想到的一件事是,StackOverflowError可能发生在通常永远不会抛出异常(或其他Throwable )的地方(例如,一个简单的getter),所以程序可能没有为此做好准备。还有更可怕的问题吗?
发布于 2013-08-27 15:09:13
堆栈溢出错误并不意味着内存耗尽,本身也不会造成任何不一致。
但是堆栈溢出错误通常是一个错误。您应该修复错误,而不是捕获异常。不要使用异常系统来隐藏bug。
即使你知道存在堆栈过深的风险(例如图形探索),也有比让堆栈爆炸更好的方法来控制堆栈。
来自the Javadoc of the Error superclass:
Throwable An Error是
的子类,表示合理的应用程序不应尝试捕获的严重问题。大多数这样的错误都是异常情况。虽然ThreadDeath错误是一种“正常”情况,但它也是error的一个子类,因为大多数应用程序都不应该尝试捕获它。
发布于 2013-08-27 15:15:36
错误是一个不应该被捕获的严重问题,因此:也不要捕获超类(Throwable)如果一个方法抛出了一个错误,你不必声明一个throws -子句
在出现错误后,应用程序行为通常是不可预测的-错误指示异常情况
因此,如果抛出了StackOverflowError,则应用程序目前达到了堆栈位置的最大值。你可以重新检查你的应用程序是否启动,比如垃圾收集器。
https://stackoverflow.com/questions/18459090
复制相似问题