首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Null/Object和Null/Null比较效率

Null/Object和Null/Null比较效率
EN

Stack Overflow用户
提问于 2013-06-17 17:35:55
回答 1查看 189关注 0票数 8

This question带领我做了一些测试:

代码语言:javascript
复制
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);      
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-17 18:18:49

如果您将最后两个循环移到开始处,您将获得相同的结果,因此比较是不相关的。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17144457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档