gpt4 book ai didi

java - Try-Catch 比 Try-With-Resources 更贵还是更便宜

转载 作者:IT老高 更新时间:2023-10-28 20:56:51 24 4
gpt4 key购买 nike

问题

我最近才开始重新接触 Java,从来没有机会使用 try-with-resources。表面上它看起来很棒,因为它可以减少代码,但实际上它比传统的 try-catch 操作成本更高还是更低?我知道 try-catch 已经是一项昂贵的操作,因此我很好奇。

我给这两种类型做了一个简单的测试,并没有发现太大的区别:

测试示例

Try-With-Resources 测试

long startTime = System.currentTimeMillis();
ArrayList<String> list = null;

try (Scanner sc = new Scanner(new File("file.txt"))) {
list = new ArrayList();
while (sc.hasNext()) {
list.add(sc.next());
}
} catch (Exception ex) {
System.err.println("Error: " + ex.getMessage());
} finally {
long endTime = System.currentTimeMillis();
System.out.println("The program completed in " + (endTime - startTime) + " ms");
}

传统的 Try-Catch 测试

long startTime = System.currentTimeMillis();
ArrayList<String> list = null;
Scanner sc = null;

try {
sc = new Scanner(new File("file.txt"));
list = new ArrayList();
while (sc.hasNext()) {
list.add(sc.next());
}
} catch (Exception ex) {
System.err.println("Error: " + ex.getMessage());
} finally {
sc.close();
long endTime = System.currentTimeMillis();
System.out.println("The program completed in " + (endTime - startTime) + " ms");
}

结果

两者都产生了 15-16 毫秒的时间 - 根本没有真正明显的差异。但不可否认,这是一个非常小的测试示例。

我的问题又来了:在底层,try-with-resources 比传统的 try-catch 贵还是便宜?

最佳答案

  1. try-catch 不是昂贵的部分。 抛出异常是(生成堆栈跟踪)。
  2. 上面的“昂贵”是指“花费几微秒”。
  3. try-with-resources 只是 try-catch 与可靠地关闭资源所需的适当代码。
  4. 您的测量代码无法证明任何事情,因为在 HotSpot 等优化运行时中测量性能存在众所周知的缺陷。您需要热身,多次重复同样的 Action ,等等。
  5. 如果您的结果超过 10 毫秒,那么显然您不会遇到 try-catch 问题,这可能会带来几微秒的开销。

关于java - Try-Catch 比 Try-With-Resources 更贵还是更便宜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28197155/

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