简单的Java程序在Windows 2008 Server上运行缓慢

这个问题在这里已经有了答案:

  • 我如何在Java中编写正确的微基准测试? 11个答案

  • 我会看看处理器的差异。 服务器系统大部分时间都是为写入磁盘而不是计算而优化的。 单看处理器的速度,根据这些信息,它们完全不同于3.4 GHz和1.6 GHz,我只能说3.4应该比1.6 GHz快得多。

    为了确保在两个系统上找到一些基准信息。


    当然,由于服务器处理器速度要慢得多,对我来说,这似乎是非常好的结果,根据我的计算(对于此测试),XEON 1.6 Ghz处理器的计算效率(每Ghz)为61%。 但是,i7还可以根据需求(Turbo Bost)将频率从3.4提高到3.8 Ghz,因此这可能会影响您的测试。 尝试安装另一个Java VM并重复该测试。 如果你之后不确定,可以尝试在linux上运行(使用java运行一个活的linux映像或其他东西)。 有很多因素可以促成结果,内存速度是另一个因素。 你也可以比较处理器的GFLOPS值,这可以给你一个关于效率的暗示,但正如在你的问题下面的一些评论中所述,微量基准对于测量某些东西并不是很有用。


    当您测试通常不会写的次优代码时,您正在测试该处理器的某些特定行为。 一个处理器设计可能会比另一个处理器执行一个操作的速度慢得多,但在真实程序中平衡的情况并不会出现。

    最简单的解决方案是尝试优化代码,并且您可能会发现它在两台机器上都快得多。

    double sum = 0; 
    for (int a=1; a < 1000000; a++) {
        int input = 100;
    
        for(int counter = 1; counter < input; counter += 2){
            sum += 1.0 / (2 * counter - 1) - 1 / (2 * counter + 1);
            // or
            // sum += 2.0 / ((2 * counter - 1) * (2 * counter + 1));
        }
    }
    

    注意:Math.pow是一项非常昂贵的操作。

    链接地址: http://www.djcxy.com/p/86551.html

    上一篇: Simple Java programm runs slow on Windows 2008 Server

    下一篇: Java parallelStream not showing correct result