gpt4 book ai didi

java - 在 Effective Java 的这段示例代码中,JVM 如何阻止 'optimizing away everything'?

转载 作者:行者123 更新时间:2023-11-29 08:25:24 25 4
gpt4 key购买 nike

我找到了 this example code Joshua Bloch 的书 Effective Java。它旨在演示为什么您应该避免不必要地创建对象:

public class Sum {
private static long sum() {
Long sum = 0L;
for (long i = 0; i <= Integer.MAX_VALUE; i++)
sum += i;
return sum;
}

public static void main(String[] args) {
int numSets = Integer.parseInt(args[0]);
long x = 0;

for (int i = 0; i < numSets; i++) {
long start = System.nanoTime();
x += sum();
long end = System.nanoTime();
System.out.println((end - start) / 1_000_000. + " ms.");
}

// Prevents VM from optimizing away everything.
if (x == 42)
System.out.println();
}
}

main 方法的最后两行在这里完成了什么?

最佳答案

最后的比较是该变量的唯一用法。没有它,谁会关心该变量中的值?

没有人!

因此,编译器可能会假设:该值从未被使用过,并且写入它的代码具有节点副作用。没有用到的东西,何必浪费时间给它们写信。

因此:最后的第一次“读取”用法可防止过度急切的编译器“优化”对您打算测量的方法的调用!

关于java - 在 Effective Java 的这段示例代码中,JVM 如何阻止 'optimizing away everything'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53683833/

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