我很好奇Java类和原始类型之间的性能差异。所以我创建了一个基准,发现类的类型比原始类型慢3倍-7倍。 (在本地机器上OSX,7倍3倍的ideone)Java双倍与双倍:类型与原始类型
下面是测试:
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));
}
}
那么,为什么是Double类型这么多慢?为什么它甚至被实现以允许数学运算符?
由于需要装箱和取消装箱,速度很慢。这是预期的行为。 – 2013-03-23 03:16:46
@HovercraftFullOfEels这是有道理的,但它仍然看起来像很多开销。 – 2013-03-23 03:19:31
这是一个很大的开销。因此,您应该避免在时间关键的代码中使用原始包装类型。 – 2013-03-23 03:20:16