引发异常的哪一部分成本高昂?
在Java中,当实际上没有错误时,使用 throw/catch 作为逻辑的一部分通常是一个坏主意(部分原因是因为抛出和捕获异常是昂贵的,并且在循环中多次这样做通常比其他不涉及抛出异常的控制结构慢得多。
我的问题是,是在 throw/catch 本身中产生的成本,还是在创建 Exception 对象时产生的成本(因为它获取了大量运行时信息,包括执行堆栈)?
换句话说,如果我这样做
Exception e = new Exception();
但不要扔它,是投掷的大部分成本,还是投掷+接球处理的成本是多少?
我不是在问将代码放在 try/catch 块中是否会增加执行该代码的成本,而是在问捕获异常是否是昂贵的部分,或者创建(调用构造函数)异常是昂贵的部分。
另一种提问方式是,如果我制作了一个 Exception 实例,并一遍又一遍地抛出并捕获它,这会比每次抛出一个新的 Exception 快得多吗?