“现代JVM”与旧JVM有何不同?

时间:2009-12-28 16:37:22

标签: java jvm history

这是我在高中和大学计算机科学课上听到的一句话:

  

“这对现代JVM来说不是问题。”

通常会出现关于整体绩效或优化策略的讨论。然而,它总是被视为一种神奇的最终答案,好像它使问题不再值得思考。这让我想知道:典型的“现代JVM”和旧的JVM之间有什么区别,真的吗?

3 个答案:

答案 0 :(得分:6)

JVM技术最重要的改进是JIT:Just In Time编译器。 JIT在运行时优化代码,从而产生巨大的性能提升,这使得Java(至少在某些领域)与C / C ++程序竞争。

关于动态优化(代码运行)与静态优化(编译期间)的好处的有趣讨论可以在Steve Yegge的演讲中找到:http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html(BTW本身很有趣)

与JIT完全无关的其他JVM改进是更快地分派虚方法,包括类方法和接口方法。

答案 1 :(得分:6)

无争议的同步过去很慢 垃圾收集速度快得多 热点优化变得更好 一些非常古老的JVM只有green threads

答案 2 :(得分:1)

现代JIT可以根据分析信息和从字节代码派生的其他信息积极优化机器代码:

  • 机器代码可以使用从预期用途派生的优化级别生成(它使用了很多,也许它会被更多地使用)。这有很大帮助!
  • 可以内联对object.getFoo()的调用,因此方法的内容直接放在生成的代码中,而无需调用方法。这可以递归地完成,并且可能导致复杂的代码被实际完成的几条指令替换。
  • 垃圾收集得到了极大的改善。这意味着在很长一段时间内不会被花掉。