假设我们不调用.printstacktrace方法-只是抛出和捕获异常。
我们正在考虑将其用于一些性能瓶颈。
假设我们不调用.printstacktrace方法-只是抛出和捕获异常。
我们正在考虑将其用于一些性能瓶颈。
fillInStackTrace()
方法并使其不做任何操作。 - J-16 SDiZ当异常被构造时,会捕获堆栈跟踪信息。
如果您真的不关心堆栈跟踪信息,可以构造一个异常并多次抛出,但这看起来像是一种hack方法,可能会令人困惑。
class ExceptionNewVsThrow {
private static RuntimeException instantiateException() {
return new RuntimeException("Hello");
}
private static void test1(Exception exception) throws Exception {
throw exception;
}
public static void main(String[] args) throws Exception {
Exception exception = instantiateException();
test1(exception);
}
}
输出结果如下:
Exception in thread "main" java.lang.RuntimeException: Hello
at FSystem.experimental.exceptions.ExceptionNewVsThrow.instantiateException(ExceptionNewVsThrow.java:18)
at FSystem.experimental.exceptions.ExceptionNewVsThrow.main(ExceptionNewVsThrow.java:26)
提醒一下,你可以重载 fillInStackTrace 方法来避免性能损失。在 Twitter 中,我们会在某些不关心堆栈跟踪的异常中这样做。
Play 框架在 1.3.x 系列中也是这样做的。
此外,你还可以在构造函数中设置断点以查看 fillInStackTrace 的执行情况。