|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)Sun公司的KohsukeKawaguchi考查了HotspotJIT在JDK6u10b14debug版中发生的汇编代码,并将其纪录在博客中。该博文侧重论述了Java优化的水平。
Kawaguchi将重点放在两个次要的中央。起首是轮回睁开(loopunrolling),它是如许一种手艺:复制轮回的每次迭代所挪用的指令以组成一个序列。经由过程削减轮回上钩算机必要实行的指令,节俭了实行工夫。JIT将其与预处置和过后剖析相分离,同时Kawaguchi对此的增补也申明了如许的现实:编译器已从轮回的疾速实行部分傍边移除一个冗余的数组索引反省。别的,了局汇编代码证实了特定于处置器的优化水平怎样。比方,Kawaguchi谈到了上面的代码:privatestaticbyte[]foo(){
byte[]buf=newbyte[256];
for(inti=0;ibuf=0;
returnbuf;
} 所发生的汇编了局利用了特定于AMD64芯片的R8-R15通用存放器汇编代码。
其次是环绕着锁(locks)而举行的优化。在Java中非竞态锁的猎取在不休地改善,而竞态锁的猎取却一向存在成绩。这个范畴的事情还在延续举行中,可是Kawaguchi的事情却申明了几个已失掉改善的中央。
这篇文章展现了该Hotspot编译器良多其他的特征,包含壮大的内联——JamesGosling注重到一篇相干的博文中说“乃至连存储分派和初始化都必要内联”。这一层级的侵犯性(aggression)是大概存在的,部分缘故原由在于JVM会在需要时做一些潜伏不平安的优化。CharlesNutter在往年初列入Lang.NET年夜会时曾对此提出了一个很好的注释。他也夸大了这项事情与JRuby的干系,和与任何面向JVM的言语的干系。“已往JVM有多种分歧的才能往静态优化和再优化代码……也许最主要的是需要时的静态“逆优化(deoptimize)”。在处置功能成绩时,逆优化(Deoptimization)使人十分镇静,由于这意味着你能够举行更多的侵犯性优化——对全部使用不断定的将来的潜伏的不平安的优化——晓得你能够在平安的路径上回退。一旦你几回碰到不异的路径,你就能够内联全部挪用路径。除非分明必要,你能够疏忽同步回护。你还能够在发明成绩以后改动利用的优化集……实质上,在运转过程当中你能够平安的“堕落”而且从毛病中进修。这就是为何在特定的基准上Java超出了C和C++和终极在几近一切基准上它都能将超出C和C++的次要缘故原由。同时这也是我们的JRuby与微软的IronPython和DLR比拟,只必要做很少的事变就能够取得可承受的功能的一个关头缘故原由。” 从实际上讲,像Java如许的注释型言语的功能很有大概终极将超出编译型言语,由于它能够在运转时基于现有硬件举行优化,同时Java中不休进步的对特定于处置器的优化的确使人十分镇静。关于面向Java平台的开辟者来讲,一个分外的优点在于跟着新版本Java编译器的公布,代码的功能会精益求精,而无需对使用的源码做任何变动。
检察英文原文:Java6HotspotPerformance
来自:http://www.infoq.com/cn/news/2008/05/hotspot_performance
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊 |
|