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
你知道哪里会被抓住吗?你有三个问题
其中,本例中最大的影响将是IBMJRE,它的循环性能非常差。如果你在做文件工作,你会发现由于操作系统的原因,速度很慢。这种组合导致速度缓慢的原因有很多,最好的选择是迁移到x86、Linux和Oracle。我们使用Dynatrace进行了非常详细的分析,我们发现Windows上的IBM JDK远远优于AIX上的同一IBM JDK版本
- 在一些真实世界测试中为20-30%
- 50-100%在其他人身上
- 在某些基准上为5-6x
花费的时间似乎是实际的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