gpt4 book ai didi

java - Null/Object和Null/Null比较效率

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:54:47 24 4
gpt4 key购买 nike

This question带我做一些测试:

public class Stack
{
public static void main(String[] args)
{
Object obj0 = null;
Object obj1 = new Object();
long start;
long end;
double difference;
double differenceAvg = 0;

for (int j = 0; j < 100; j++)
{
start = System.nanoTime();

for (int i = 0; i < 1000000000; i++)
if (obj0 == null);

end = System.nanoTime();
difference = end - start;
differenceAvg +=difference;
}

System.out.println(differenceAvg/100);
differenceAvg = 0;

for (int j = 0; j < 100; j++)
{
start = System.nanoTime();

for (int i = 0; i < 1000000000; i++)
if (null == obj0);

end = System.nanoTime();
difference = end - start;
differenceAvg +=difference;
}

System.out.println(differenceAvg/100);
differenceAvg = 0;

for (int j = 0; j < 100; j++)
{
start = System.nanoTime();

for (int i = 0; i < 1000000000; i++)
if (obj1 == null);

end = System.nanoTime();
difference = end - start;
differenceAvg +=difference;
}

System.out.println(differenceAvg/100);
differenceAvg = 0;

for (int j = 0; j < 100; j++)
{
start = System.nanoTime();

for (int i = 0; i < 1000000000; i++)
if (null == obj1);

end = System.nanoTime();
difference = end - start;
differenceAvg +=difference;
}

System.out.println(differenceAvg/100);
}
}

enter image description here

other post 相切,有趣的是,当我们正在比较的 Object 被初始化时,比较的速度有多快。每个输出中的前两个数字是 Objectnull 时的数字,后两个数字是 Object 初始化时的数字。我运行了 21 次额外的程序执行,在所有 30 次执行中,当 Object 被初始化时比较要快得多。这里发生了什么?

最佳答案

如果将最后两个循环移到开头,您将得到相同的结果,因此比较无关紧要。

这一切都与 JIT 编译器预热有关。在前 2 个循环中,java 从解释字节码开始。经过一些迭代后,它确定代码路径是“热的”,因此它将其编译为机器代码并删除无效的循环,因此您基本上是在测量 System.nanotimedouble 算术。

我不太确定为什么两个循环很慢。我认为在找到两条热路径后,它决定优化整个方法。

关于java - Null/Object和Null/Null比较效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17144457/

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