捕获StackOverflowError有什么危害?

Han*_*örr 9 java stack-overflow

只是好奇.在回答有关捕获StackOverflowErrors的问题时,有人写道:"当然,在某种情况下,堆栈溢出可能会使应用程序不一致,就像内存耗尽一样".StackOverflowErrors有什么特别之处,它们可能会破坏应用程序状态,比如在出现Bug时抛出NullPointerException?我能想到的一件事是StackOverflowError可能发生在通常永远不会抛出异常(或其他Throwable)的地方(例如一个简单的getter),所以程序可能没有为此做好准备.还有更多恶魔般的问题吗?

Den*_*ret 10

堆栈溢出错误根本不意味着内存耗尽并且本身不会产生任何不一致.

但堆栈溢出错误通常是一个错误.你应该修复bug而不是捕获异常.不要使用异常系统来隐藏错误.

即使您知道存在堆栈太深的风险(例如图形探索),也有更好的方法来控制它,而不是让堆栈爆炸.

来自Error超类的Javadoc:

Error是Throwable的子类,表示合理的应用程序不应该尝试捕获的严重问题.大多数此类错误都是异常情况.ThreadDeath错误,虽然是"正常"条件,但也是Error的子类,因为大多数应用程序不应该尝试捕获它.