调整Java 7以匹配Java 6的性能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了调整Java 7以匹配Java 6的性能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1603字,纯文字阅读大概需要3分钟。
内容图文
![调整Java 7以匹配Java 6的性能](/upload/InfoBanner/zyjiaocheng/723/8ce5ffd4a23b48b18116e72452454b8e.jpg)
我们有一个简单的单元测试作为我们的性能测试套件的一部分,我们用它来验证基本系统是否合理并在我们开始测试代码之前执行.这样我们通常会验证机器是否适合运行实际的性能测试.
当我们使用此测试比较Java 6和Java 7时,Java 7需要相当长的时间才能执行!我们看到Java 6平均为22秒,Java 7平均为24秒.测试只计算fibonacci,因此在这里只有单个线程中的字节码执行应该与I / O或其他任何东西相关.
目前我们使用带有或不带“-server”的Windows上的默认设置运行它,使用32位和64位JVM,所有运行都表明Java 7的类似降级.
哪些调优选项可能适合尝试将Java 7与Java 6相匹配?
public class BaseLinePerformance {
@Before
public void setup() throws Exception{
fib(46);
}
@Test
public void testBaseLine() throws Exception {
long start = System.currentTimeMillis();
fib(46);
fib(46);
System.out.println("Time: " + (System.currentTimeMillis() - start));
}
public static void fib(final int n) throws Exception {
for (int i = 0; i < n; i++) {
System.out.println("fib(" + i + ") = " + fib2(i));
}
}
public static int fib2(final int n) {
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return fib2(n - 2) + fib2(n - 1);
}
}
更新:我已经减少了测试以避免睡眠并遵循How do I write a correct micro-benchmark in Java?中的其他建议,我仍然看到Java 7和Java 6之间的相同差异,打印编译的额外JVM选项和GC在实际测试期间不显示任何输出,只打印最初的编译信息.
解决方法:
我的一位同事在经过多次挖掘后发现了原因:
有一个JVM标志-XX:MaxRecursiveInlineLevel,其默认值为1.在以前的版本中,这个设置的处理似乎稍微不正确,所以Sun / Oracle在Java 7中“修复”了这个,但它有副作用有时,内联现在不那么积极地进行,因此递归代码的纯运行时/ CPU时间可能比以前更长.
我们正在测试将其设置为2以获得与Java 6中相同的行为,至少对于相关测试而言.
内容总结
以上是互联网集市为您收集整理的调整Java 7以匹配Java 6的性能全部内容,希望文章能够帮你解决调整Java 7以匹配Java 6的性能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。