在讨论和一些关于使用异常与返回值的研究期间,我想到了以下几点:
返回值更便宜并提供更好的性能,而抛出异常需要创建新对象并展开堆栈。
现在,我阅读了堆栈展开,据我了解,这是在跳回堆栈上的下一帧之前释放当前堆栈帧上所有已分配资源的突然过程。特别是在 Java 中,不会释放任何资源,而是当前范围内的所有对象都被取消引用并符合 GC 条件。另一方面,在优雅返回的情况下,由于超出范围,对象会立即被销毁。
问题是这样的:
拥有一个声明了少量实例(例如 3 个)的方法并假设如果抛出异常,它将被捕获到下一个级别(例如,它不会爬升 5 个堆栈级别),是否真的有一个明显的(不确定这是否是正确使用的词)与返回值相比,性能方面的区别?我知道最终在一个简单的场景中不会有明显的差异,但它会导致更大的系统中的差异吗?
请假设在方法中的该点抛出异常是有意义的(这是一种异常情况)并且它不适用于控制流(这是一个已知的错误)。仅出于性能原因,才首选返回值。