gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:42:33 26 4
gpt4 key购买 nike

我想减少垃圾收集器。使用此代码是否更好:

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 in thread "main" your.package.MyException
    at your.YourClass.<clinit>(YourClass.java:6)
  2. 由于“性能”原因,代码变得更难读了。这总是通往 hell 的必经之路,除非你能证明你的改变会产生重大影响,否则不要那样做。异常对象很可能不会存活很长时间 - 在这种情况下,为 GC 清理它非常便宜。

顺便说一下,如果您的方法经常抛出异常以至于它会产生影响,那么您很可能做错了一些事情。

关于java - 为了有效地使用垃圾收集器,在 Java 中保留异常是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33344842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com