随着时间的推移,Sun 的 JVM 和 JIT 变得非常聪明。过去作为必要的微优化的常识已经不再需要,因为它会为您处理好。
例如,过去的情况是您应该将所有可能的类标记为最终类,因此 JVM 内联尽可能多的代码。但是现在,JIT 根据在运行时加载的类知道您的类是否是最终类,如果您加载一个类以使原始类不可最终化,它会取消内联方法并将其取消标记为最后。
JVM 或 JIT 还为您做了哪些其他智能微优化?
编辑:我把它做成了一个社区维基;我想随着时间的推移收集这些。
随着时间的推移,Sun 的 JVM 和 JIT 变得非常聪明。过去作为必要的微优化的常识已经不再需要,因为它会为您处理好。
例如,过去的情况是您应该将所有可能的类标记为最终类,因此 JVM 内联尽可能多的代码。但是现在,JIT 根据在运行时加载的类知道您的类是否是最终类,如果您加载一个类以使原始类不可最终化,它会取消内联方法并将其取消标记为最后。
JVM 或 JIT 还为您做了哪些其他智能微优化?
编辑:我把它做成了一个社区维基;我想随着时间的推移收集这些。
它令人印象深刻。所有这些都是您can't
在 C++ 中所做的事情(当然与 Java 所做的相同)。请记住,Java 的早期版本因没有这些东西而开始享有“缓慢”的声誉,并且随着时间的推移我们会不断改进。这仍然是一个很大的研究领域。
Oracle 有一个关于Hotspot JVM 中使用的性能技术的 wiki 。
Java 在内联方面更聪明