异常的代价是多少

异常的代价是多少,第1张

异常的代价是多少

我没有花时间去阅读Exception,但是用您的一些修改后的代码进行了非常快速的测试,我得出的结论是Exception情况比boolean情况要慢得多。

我得到以下结果:

Exception:20891msBoolean:62ms

从此代码:

public class Test {    public static void main(String args[]) { Test t = new Test(); t.testException(); t.testBoolean();    }    public void testException() { long start = System.currentTimeMillis(); for(long i = 0; i <= 10000000L; ++i)         doSomethingException(); System.out.println("Exception:" + (System.currentTimeMillis()-start) + "ms");    }    public void testBoolean() { long start = System.currentTimeMillis(); for(long i = 0; i <= 10000000L; ++i)         doSomething(); System.out.println("Boolean:" + (System.currentTimeMillis()-start) + "ms");    }    private void doSomethingException() {        try {          doSomethingElseException();        } catch(DidNotWorkException e) {//Msg        }    }    private void doSomethingElseException() throws DidNotWorkException {       if(!isSoAndSo()) {          throw new DidNotWorkException();       }    }    private void doSomething() {        if(!doSomethingElse()) ;//Msg    }    private boolean doSomethingElse() {       if(!isSoAndSo())          return false;       return true;    }    private boolean isSoAndSo() { return false; }    public class DidNotWorkException extends Exception {}}

我愚蠢地没有很好地阅读我的代码,并且以前有一个错误(多么令人尴尬),如果有人可以三遍检查此代码,我非常乐意使用,以防万一我变老了。

我的规格是:

  • 编译并在1.5.0_16上运行
  • Sun JVM
  • WinXP SP3
  • 英特尔迅驰双核T7200(2.00Ghz,977Mhz)
  • 2.00 GB内存

在我看来,您应该注意到,非异常方法不会在doSomethingElse中给出日志错误,而是返回一个布尔值,以便调用代码可以处理失败。如果有多个区域可能会失败,则可能需要在内部记录错误或引发异常。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5428317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存