在AIX7上使用IBMJVM时会造成巨大的性能损失



我有以下代码:

        List<Long> array = new ArrayList<>();
        for (int i = 0; i < 30000; i++)
        {
            array.add(Long.valueOf(i));
        }
        for (int j = 0; j < 30000; j++)
        {
            for (int i = 0; i < 30000 - j; i++)
            {
                array.set(i, array.get(i) + j);
            }
        }

当我在本地机器(JRE 1.7_0_71,Win 7 64位,4核,8GB RAM)上的Oracle JVM下编译并运行它时,我的运行时间大约为3.5秒。

1.run: 3446ms
2.run: 3485ms
3.run: 3546ms
4.run: 3721ms
5.run: 3573ms

当我在带有IBM JVM(j9,java 7,build pap6470_27sr2-201411101_01(SR2))的AIX机器(POWER7+,16核,64GB RAM)上运行它时,每次运行的结果几乎是9。

1.run: 8518ms
2.run: 8548ms
3.run: 8499ms
4.run: 8486ms
5.run: 9235ms

知道在哪里可以抓吗?

您有3个问题。

  1. 您的处理器体系结构
  2. 您选择的操作系统
  3. 您的JVM提供程序

其中,在这种情况下,最大的影响将是IBMJRE,它对循环的性能非常差。如果你在做文件工作,你会发现由于操作系统的原因,速度很慢。这种组合导致速度缓慢的原因有很多,最好的选择是改用x86、Linux和Oracle。

我们使用Dynatrace进行了非常详细的分析,发现Windows上的IBM JDK在很大程度上优于AIX上的相同IBM JDK版本。

  • 在一些真实世界的测试中获得20-30%
  • 其他50-100%
  • 在某些基准上为5-6x

通过从JDK1.6迁移到1.7,我们确实在AIX上得到了显著的改进。研究似乎再次表明V8有一些减速。

所花费的时间似乎是实际的CPU时间。AIX上的IBMJDK似乎只是更加努力地完成同样数量的工作。

相关内容

  • 没有找到相关文章

最新更新