我有以下代码:
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);
}
}
当我编译它并在我的本地机器上的Oracle JVM下运行它(JRE 1.7_0_71,Win 7 64bit,4 Core,8GB RAM)时,运行时间大约为3,5s。
1.run: 3446ms
2.run: 3485ms
3.run: 3546ms
4.run: 3721ms
5.run: 3573ms
当我在带有IBM JVM(j9,java 7,build pap6470_27sr2-20141101_01(SR2))的AIX机器(POWER7 +,16内核,64GB RAM)上运行它时,每次运行时得到的结果几乎是9s。
1.run: 8518ms
2.run: 8548ms
3.run: 8499ms
4.run: 8486ms
5.run: 9235ms
知道哪里可以抓到?
答案 0 :(得分:1)
你有3个问题。
其中,在这种情况下最大的影响将是IBM JRE,它的循环性能非常差。如果你正在进行文件工作,你会发现它因操作系统而变慢。这种组合有许多缓慢的原因,最好的办法是转向x86,Linux和Oracle。
答案 1 :(得分:0)
我们使用Dynatrace进行了非常详细的分析,我们发现Windows上的IBM JDK大大优于AIX上的相同IBM JDK版本。
通过从JDK 1.6迁移到1.7,我们确实在AIX上获得了显着的改进。研究似乎表明V8再次有所放缓。
花费的时间似乎是实际的CPU时间。 AIX上的IBM JDK似乎正在更加努力地完成同样的工作。