繁体   English   中英

为了有效地使用垃圾收集器,在Java中保留异常是否更好?

[英]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,但在第二种情况下,我们将阻塞我们的堆并多次诱导垃圾收集器。

没有! 使用通常的,惯用的方式,每次都抛出一个新的例外。 您建议的方法存在一些问题:

  1. 它抛弃了任何合理的堆栈跟踪,这是异常被抛出程序(或记录)时最重要的事情。 堆栈跟踪在Exception创建时填充,而不是在抛出时,因此所有堆栈跟踪都是相同的,没有信息,并且您不知道哪个方法抛出它们:

     Exception in thread "main" your.package.MyException at your.YourClass.<clinit>(YourClass.java:6) 
  2. 由于“性能”原因,代码变得稍微不可读。 除非你能证明你的改变能带来显着的改变,否则这总是一种可靠的方法。 异常对象很可能不会存在很长时间 - 在这种情况下,为GC清理它是非常便宜的。

顺便说一句,如果你的方法经常抛出一个异常会产生影响,那么无论如何你都会做出非常错误的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM