我想减少垃圾收集器。使用此代码更好:
private MyException myException = new MyException();
public void frequentlyUsedMethod(){
try{
...
}catch(Exception e){
throw myException;
}
}
而不是:
public void frequentlyUsedMethod(){
try{
...
}catch(Exception e){
throw new MyException();
}
}
如果我在第一种情况下理解正确,我们只创建一次MyException,但在第二种情况下,我们将阻塞我们的堆并多次诱导垃圾收集器。
答案 0 :(得分:6)
没有!使用通常的惯用方法,每次都抛出一个新的异常。您建议的方法存在一些问题:
它会丢弃任何合理的堆栈跟踪,这是异常被抛出程序(或记录)时最重要的事情。堆栈跟踪在异常创建时填充,而不是在抛出时,因此所有堆栈跟踪都是相同的,没有信息,并且您将不知道哪个方法抛出它们:
Exception in thread "main" your.package.MyException
at your.YourClass.<clinit>(YourClass.java:6)
由于“性能”原因,代码变得更加难以理解。除非你能证明你的改变能带来显着的改变,否则这总是一种可靠的方法。异常对象很可能不会存在很长时间 - 在这种情况下,为
顺便说一句,如果你的方法经常抛出一个异常会产生影响,那么你无论如何都会做出非常错误的事情。