【发布时间】:2015-01-06 17:36:03
【问题描述】:
我有以下代码:
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-20141101_01(SR2))的 AIX 机器(POWER7+、16 核、64GB RAM)上运行它时,每次运行我得到的结果几乎是 9 秒。
1.run: 8518ms
2.run: 8548ms
3.run: 8499ms
4.run: 8486ms
5.run: 9235ms
知道哪里可以抓到吗?
【问题讨论】:
-
你在不同的机器上试过了吗?你在隔离模式下试过了吗?
-
我在几台aix机器上试了一下,结果都很差。我也对用 C 编写的代码进行了类似的测试,并且在 AIX 上速度更快。也许一些JVM选项?还是一些 AIX 设置?你到底是什么意思隔离模式?执行时几乎所有其他东西都在服务器上运行。
-
你能把它发布到developers.ibm.com 和他们的buglist 上吗?也许他们可能已经解决了这个问题,或者存在一些相同的设置。因为我们正在为我们正在开发的产品使用 IBM JVM java7。所以我想在将来避免这个问题。在此先感谢:)
-
我已将此问题提交到 developerworks 论坛:ibm.com/developerworks/community/forums/html/…。当我得不到答案时,我会把它作为一个 bug 提出来。
-
根据您在问题中提供的数据,很难说“Java 在我的 AIX 机器上运行缓慢”的说法是合理的。 x86 上的软件堆栈是不同的。为什么不尝试在 x86 上比较相同版本的 J9?此外,您在 AIX 机器上拥有多少 CPU 能力也是值得怀疑的。 AIX 用户通常具有限制 CPU 时间的管理策略。即使您拥有完整的 CPU 访问权限,POWER7 的时钟范围也从 2.4 GHz 到 4.25 GHz。
标签: performance java-7 aix j9 ibm-jvm