[英]Is it better to keep exceptions in Java for effectively use a garbage collector?
我想减少垃圾收集器。 使用此代码更好:
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,但在第二种情况下,我们将阻塞我们的堆并多次诱导垃圾收集器。
没有! 使用通常的,惯用的方式,每次都抛出一个新的例外。 您建议的方法存在一些问题:
它抛弃了任何合理的堆栈跟踪,这是异常被抛出程序(或记录)时最重要的事情。 堆栈跟踪在Exception创建时填充,而不是在抛出时,因此所有堆栈跟踪都是相同的,没有信息,并且您不知道哪个方法抛出它们:
Exception in thread "main" your.package.MyException at your.YourClass.<clinit>(YourClass.java:6)
由于“性能”原因,代码变得稍微不可读。 除非你能证明你的改变能带来显着的改变,否则这总是一种可靠的方法。 异常对象很可能不会存在很长时间 - 在这种情况下,为GC清理它是非常便宜的。
顺便说一句,如果你的方法经常抛出一个异常会产生影响,那么无论如何你都会做出非常错误的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.