6

随着时间的推移,Sun 的 JVM 和 JIT 变得非常聪明。过去作为必要的微优化的常识已经不再需要,因为它会为您处理好。

例如,过去的情况是您应该将所有可能的类标记为最终类,因此 JVM 内联尽可能多的代码。但是现在,JIT 根据在运行时加载的类知道您的类是否是最终类,如果您加载一个类以使原始类不可最终化,它会取消内联方法并将其取消标记为最后。

JVM 或 JIT 还为您做了哪些其他智能微优化?

编辑:我把它做成了一个社区维基;我想随着时间的推移收集这些。

4

3 回答 3

6

它令人印象深刻。所有这些都是您can't在 C++ 中所做的事情(当然与 Java 所做的相同)。请记住,Java 的早期版本因没有这些东西而开始享有“缓慢”的声誉,并且随着时间的推移我们会不断改进。这仍然是一个很大的研究领域。

于 2009-07-17T17:25:15.607 回答
4

Oracle 有一个关于Hotspot JVM 中使用的性能技术的 wiki 。

于 2009-07-28T05:31:47.157 回答
3

Java 在内联方面更聪明

  • 内联代码仅在运行时可用,甚至动态生成。
  • 内联虚拟方法(一次最多两个)
  • 对内联方法及其内联方法执行逃逸分析。(在 C++ 中更难做到)
于 2009-07-17T18:51:03.733 回答