Java 6 Hotspot的性能将有可能超越编译型语言

    Sun公司的Kohsuke Kawaguchi考察了Hotspot JIT在JDK6 u10 b14 debug版中产生的汇编代码,并将其记录在博客中。该博文着重阐述了Java优化的程度。

    Kawaguchi 将重点放在两个主要的地方。首先是循环展开(loop unrolling),它是这样一种技术:复制循环的每次迭代所调用的指令以构成一个序列。通过减少循环中计算机需要执行的指令,节省了执行时间。JIT 将其与预处理和事后分析相结合,同时Kawaguchi对此的补充也说明了这样的事实:编译器已从循环的快速执行部分当中移除了一个冗余的数组索引检查。此外,结果汇编代码证明了特定于处理器的优化程度如何。例如,Kawaguchi谈到了下面的代码:

private static byte[] foo() { byte[] buf = new byte[256]; for( int i=0; i buf[i] = 0; return buf; }

    所产生的汇编结果使用了特定于AMD64芯片的R8-R15通用寄存器汇编代码。

    其次是围绕着锁(locks)而进行的优化。在Java中非竞态锁的获取在不断地改进,而竞态锁的获取却一直存在问题。这个领域的工作还在持续进行中,但是Kawaguchi的工作却说明了几个已经得到改进的地方。

    这篇文章展示了该Hotspot编译器很多其他的特性,包括强大的内联——James Gosling注意到一篇相关的博文中说“甚至连存储分配和初始化都需要内联”。这一层级的侵略性(aggression)是可能存在的,部分原因在于 JVM会在必要时做一些潜在不安全的优化。Charles Nutter在今年初参加Lang.NET大会时曾对此提出了一个很好的解释。他也强调了这项工作与JRuby的关系,以及与任何面向JVM的语言的关系。

    “过去JVM有多种不同的能力去动态优化和再优化代码……或许最重要的是必要时的动态“逆优化(deoptimize)”。在处理性能问题时,逆优化(Deoptimization)令人非常兴奋,因为这意味着你可以进行更多的侵略性优化——对整个应用不确定的未来的潜在的不安全的优化——知道你可以在安全的路径上回退。一旦你几次遇到相同的路径,你就可以内联整个调用路径。除非明显需要,你可以忽略同步保护。你还可以在发现问题之后改变使用的优化集……本质上,在运行过程中你可以安全的“出错”并且从错误中学习。这就是为什么在特定的基准上Java超越了C和C++以及最终在几乎所有基准上它都能将超越C和C++的主要原因。同时这也是我们的JRuby与微软的IronPython和DLR相比,只需要做很少的事情就可以获得可接受的性能的一个关键原因。”

    从理论上讲,像Java这样的解释型语言的性能很有可能最终将超越编译型语言,因为它可以在运行时基于现有硬件进行优化,同时Java中不断提高的对特定于处理器的优化确实令人非常兴奋。对于面向Java平台的开发者来说,一个额外的好处在于随着新版本 Java编译器的发布,代码的性能会不断改进,而无需对应用的源码做任何更改。

英文原文:http://www.infoq.com/news/2008/05/hotspot_performance

posted on 2008-05-14 17:16 银河使者 阅读(221) 评论(3)  编辑  收藏 所属分类: java

评论

# re: Java 6 Hotspot的性能将有可能超越编译型语言 2008-05-14 18:24 隔叶黄莺

好像不太可能,怎么都会有一个加载字节码过程,解释型再优化都有中间代码的存在,本地代码则不同,肯定效率要高,如果字节码能优化的方法,本地代码也参照来优化一下,那么了节码仍然是无法比拟的,只是本地代码可能还不屑如此

就像竞走不会有跑快一样的。  回复  更多评论   

# re: Java 6 Hotspot的性能将有可能超越编译型语言 2008-05-16 00:21 magicgod

完全有可能,因为实际上java现在最后运行的是本地代码了,所以在足够优化的情况下是可以超过其他本地代码的。这看起来最后将是编译器的优化比较。  回复  更多评论   

# re: Java 6 Hotspot的性能将有可能超越编译型语言 2008-05-25 19:24 隔叶黄莺

这也就是在持续运行的像企业应用服务程序有这个优势,能够尽可能的多运行本地代码。对于桌面程序,你每次启动,并在前面阶段的执行就是在解释字节码,弱点就体现在桌面程。
并且Java程序占用巨大的内存,这在硬件成本不高的情况,倒能够接受增加硬件成本换取性能的做法。  回复  更多评论   


标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 




<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

公告

请使用站内搜索:
(不要按回车,请直接点击查询按钮)




我的其他Blog:

nokiaguy.cnblogs.com

常用链接

留言簿(3)

我参与的团队

随笔分类(130)

随笔档案(62)

相册

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

60天内阅读排行