相关疑难解决方法(0)

为什么在x64 Java中长度比int慢?

我在Surface Pro 2平板电脑上运行带有Java 7更新45 x64(没有安装32位Java)的Windows 8.1 x64.

当i的类型为long时,下面的代码需要1688ms,当i是int时,代码需要109ms.为什么在具有64位JVM的64位平台上,long(64位类型)比int慢一个数量级?

我唯一的猜测是,CPU需要更长的时间来添加64位整数而不是32位整数,但这似乎不太可能.我怀疑Haswell不使用纹波进位加法器.

我在Eclipse Kepler SR1中运行它,顺便说一句.

public class Main {

    private static long i = Integer.MAX_VALUE;

    public static void main(String[] args) {    
        System.out.println("Starting the loop");
        long startTime = System.currentTimeMillis();
        while(!decrementAndCheck()){
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Finished the loop in " + (endTime - startTime) + "ms");
    }

    private static boolean decrementAndCheck() {
        return --i < 0;
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑:以下是VS 2013(下面),同一系统编译的等效C++代码的结果. 长:72265ms int:74656ms 这些结果是在调试32位模式下.

在64位发布模式下: 长:875ms long long:906ms int:1047ms

这表明我观察到的结果是JVM优化怪异而不是CPU限制.

#include "stdafx.h"
#include "iostream"
#include …
Run Code Online (Sandbox Code Playgroud)

java performance 32bit-64bit long-integer

90
推荐指数
3
解决办法
1万
查看次数

标签 统计

32bit-64bit ×1

java ×1

long-integer ×1

performance ×1