如果我有一个类的引用并在其上调用一个方法,并且该类或方法是最终的,我的理解是编译器或JVM将用更便宜的静态调度替换动态调度,因为它可以确切地确定哪个版本将被调用.
但是,如果我有一个接口的引用,并且接口当前只有一个实现者,并且该实现者是final或该方法在该实现者中是最终的,那么JVM能否在运行时找出并优化这些调用呢?
Eug*_*ota 11
(在此处插入关于优化的Knuth引用.)
请参阅Wiki Home> HotSpot Internals for OpenJDK> PerformanceTechniques.
- 方法经常被内联.这增加了编译器的优化"范围".
- 静态,私有,最终和/或"特殊"调用很容易内联.
- 如果类层次结构允许,虚拟(和接口)调用通常会降级为"特殊"调用.如果进一步的类加载会破坏事物,则会注册依赖项.
- 具有不平衡类型配置文件的虚拟(和接口)调用使用乐观检查进行编译,以支持历史上常见的类型(或两种类型).
Inlining有一些有趣的链接.
| 归档时间: |
|
| 查看次数: |
1299 次 |
| 最近记录: |