我正在阅读 HotSpot VM 应用的优化技术,并找到了 Oracle 的这个演示文稿,其中列出了 HotSpot VM 尝试内联方法调用时的三个可能条件:
- 去虚拟化(证明只有一种目标方法)
- 单态内联缓存
- 配置文件驱动的内联缓存
通过搜索互联网,我相信我理解这意味着以下内容:
VM“证明”一个类型当前没有子类型。因此,可以将虚拟方法调用转换为允许内联方法代码的非虚拟方法调用。添加了一个保护条件,用于检查执行内联后没有加载任何子类型。
观察到方法总是在特定调用站点的单一类型上调用。(额外的问题:Java 是否支持多态内联缓存?)这允许执行乐观内联,其中保护条件检查类型是否不是缓存中表示的类型。
我不知道那是什么。
我的问题是:内联方法调用还有其他主要原因吗?我的研究正确吗?什么是配置文件驱动的内联缓存?