在Java中,构造异常对象是”十分”耗时的,其原因是在默认情况下,创建异常对象时会调用父类Throwable的fillInStackTrace()方法生成栈追踪信息,JDK中的源码如下:
public synchronized Throwable fillInStackTrace() {
if (stackTrace != null ||
backtrace != null /* Out of protocol state */ ) {
fillInStackTrace(0); // native方法
stackTrace = UNASSIGNED_STACK;
}
return this;
}
在我自己做的测试中,new一个带有栈追踪信息的Exception对象要比创建不带追踪信息的对象慢50倍以上。虽然打印调用栈能够精确定位到错误发生的代码所在行,但我们可以考虑一下,真的有必要让所有异常都生成这些信息吗?
我们在开发业务系统的

最低0.47元/天 解锁文章
9万+

被折叠的 条评论
为什么被折叠?



