Performance 在AIX7上使用IBMJVM时会造成大量性能损失

Performance 在AIX7上使用IBMJVM时会造成大量性能损失,performance,java-7,aix,j9,ibm-jvm,Performance,Java 7,Aix,J9,Ibm Jvm,我有以下代码: 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;

我有以下代码:

        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);
            }
        }
当我使用IBM JVM(j9,java 7,build pap6470_27sr2-20141101_01(SR2))在AIX机器(POWER7+,16核,64GB RAM)上运行它时,每次运行的结果几乎是9秒

1.run: 8518ms
2.run: 8548ms
3.run: 8499ms
4.run: 8486ms
5.run: 9235ms
你知道哪里会被抓住吗?

你有三个问题

  • 您的处理器架构
  • 您的操作系统选择
  • 您的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似乎正在更加努力地完成相同数量的工作。

    您在不同的机器上尝试过它吗?您是否在隔离模式下进行了尝试?我在几台aix机器上进行了尝试,结果都很差。我还对用C编写的代码进行了类似的测试,该测试在AIX上更快。也许有一些JVM选项?还是一些AIX设置?你说的隔离模式到底是什么意思?在执行时,服务器上几乎运行着其他任何东西。您可以将其发布在developers.ibm.com及其错误列表上吗?也许他们已经解决了这个问题,或者为同样的问题提供了一些设置。因为我们的产品使用的是IBM JVM java7,它正在开发中,所以我希望在将来避免这个问题。提前感谢:)我已将此问题提交给developerworks论坛:。当我得不到答案时,我会把它作为一个bug提出来。根据您在问题中提供的数据,很难判断“Java在我的AIX机器上运行缓慢”这句话是正确的。x86上的软件堆栈是不同的。为什么不尝试在x86上比较同一版本的J9呢?另外,AIX机器上的CPU能力有多大也是个问题。AIX用户通常具有限制CPU时间的管理策略。即使您拥有完整的CPU访问权限,POWER7的时钟范围也会从2.4 GHz到4.25 GHz不等。
    1.run: 8518ms
    2.run: 8548ms
    3.run: 8499ms
    4.run: 8486ms
    5.run: 9235ms