了解 Java 的堆栈在抛出异常时展开



在讨论中以及有关使用异常与返回价值的一些研究,以下是我的想法:

它更便宜,可以更好地返回值,而抛出例外需要创建一个新对象并堆叠放松。

现在,我在堆栈上阅读了读书,从我的理解中,这是一个突然的过程,即在跳回堆栈上的下一个框架之前释放当前堆栈框架上的所有分配资源。特别是在Java中,没有发布任何资源,而是当前范围中的所有对象都会被删除并符合GC的资格。另一方面,对于优雅的返回,由于范围不超出范围,这些物体立即被破坏。

问题是:

拥有一种宣布少量实例(例如3)的方法,并假设如果抛出异常,它将被捕获到一个下一个级别(例如,它不会爬5个堆栈级别)与返回价值,明智的值相比,实际上是一个明显的(不确定这是正确使用的单词)差异吗?我知道,在一天结束时,在一个简单的情况下,不会有明显的区别,但是它可以在更大的系统中导致一个吗?

请假设,在方法中,在该点上施加例外是有意义的(这是一种特殊情况),而不是控制流(这是一个已知的错误)。返回值仅出于绩效原因而被首选。

考虑创建异常的堆栈,Java不仅返回直接呼叫者。Java一直上升到根堆。因此,依靠您的小方法运行的深度,创建堆栈可能很昂贵。

还请注意以下问题:投掷例外的哪一部分价格昂贵?

相关内容

最新更新