Java Double vs double: class type vs primitive type
我很好奇 Java 的类和 double 的原始类型之间的性能差异是什么。所以我创建了一个小基准,发现类类型比原始类型慢 3 到 7 倍。 (本地机器 OSX 上 3x,ideone 上 7x)
这是测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 旨在允许您使用此类package器,而不必担心它们不是纯值这一事实。您是否希望不能拥有
在任何情况下都是如此,使用
最后一点:在对此类事物进行基准测试之前,您应该让 VM 预热。
您通常不会使用