现代JVM与旧版JVM有何不同?

6

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

"对于现代JVM来说,这不是一个问题。"

通常情况下,这会在讨论整体性能或优化策略时出现。它总是被视为某种神奇的最终答案,好像它使问题不再值得考虑一样。这让我想知道:原型“现代JVM”与旧版JVM之间有什么区别呢?


1
二进制文件上的日期戳 :-P - TofuBeer
@TofuBeer:谢谢,显而易见的队长。正确简洁,所以+1/采纳。哦等等... - Pops
有关垃圾回收位的更详细解释的相关问题:https://dev59.com/JnA85IYBdhLWcg3wHv3B - Pops
3个回答

6
JVM技术最重要的改进是JIT:即时编译器。JIT在运行代码时优化代码,从而产生巨大的性能提升,使得Java(至少在某些领域)与C/C++程序竞争力强。
关于动态优化(代码运行时)与静态优化(编译期间)的好处的有趣讨论可以在Steve Yegge的演讲中找到:http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html(顺便说一句,这个演讲本身也很有趣)。
其他与JIT不完全相关的JVM改进包括更快的虚拟方法调度,包括类方法和接口方法。

6

无争用同步曾经很慢。
垃圾收集变得更快了。
Hotspot优化变得更好了。
一些非常老的JVM仅有绿色线程


1
我原本想说,“现代JVM”更多地是关于原始JVM性能不佳的陈述,而不是关于当前一代JVM的陈述。 - Jherico

1
现代JIT可以基于分析信息和从字节码中获取的其他信息对机器代码进行积极优化:
  • 可以根据预期使用情况(它曾经被广泛使用,可能会更多地使用)生成具有优化级别的机器代码。这非常有帮助!
  • 可以内联调用 object.getFoo(),使方法的内容直接放置在生成的代码中,而无需进行方法调用。这可以递归地完成,并可能导致复杂的代码被仅执行少数指令所替换。
  • 垃圾收集已经大大改进。这意味着不需要花费太多时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接