加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Double vs double:class type vs primitive type

发布时间:2020-12-14 16:28:11 所属栏目:Java 来源:网络整理
导读:我很好奇 Java的类和原始类型之间的性能差异是什么.所以我创建了一个小的基准,发现类类型比原始类型慢3倍到7倍. (本机OSX为3x,ideone为7x) 这是测试: class Main { public static void main(String args[]) { long bigDTime,littleDTime; { long start = Sy
我很好奇 Java的类和原始类型之间的性能差异是什么.所以我创建了一个小的基准,发现类类型比原始类型慢3倍到7倍. (本机OSX为3x,ideone为7x)

这是测试:

class Main {
    public static void main(String args[]) {
        long bigDTime,littleDTime;

        {
            long start = System.nanoTime();
            Double d = 0.0;
            for (Double i = 0.0; i < 1432143.341; i += 0.1) {
                d += i;
            }
            long end = System.nanoTime();
            bigDTime = end - start;
            System.out.println(bigDTime);
        }

        {
            long start = System.nanoTime();
            double d = 0.0;
            for (double i = 0.0; i < 1432143.341; i += 0.1) {
                d += i;
            }
            long end = System.nanoTime();
            littleDTime = end - start;
            System.out.println(littleDTime);
        }

        System.out.println("D/d = " + (bigDTime / littleDTime));
    }
}

http://ideone.com/fDizDu

那么为什么Double型这么慢呢?为什么甚至实现允许数学运算符?

解决方法

So why is the Double type so much slower?

因为该值被包裹在需要分配,释放,内存管理加getter和setter的对象内

Why is it even implemented to allow mathematical operators?

因为autobox旨在允许您使用这样的包装器,而不用担心它们不是纯值.你不想拥有一个ArrayList< Double>?性能并不总是必要的,根据情况可以接受3x-7x的性能下降.优化是不总是存在的要求.

在每种情况下都是如此,使用LinkedList对随机访问元素可能是过分的,但这并不意味着LinkedList不应该被实现.这既不意味着使用链表进行少量随机访问也不会影响性能.

最后一个注意事项:您应该让VM在对这些事情进行基准测试之前进行预热.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读