1

我正在阅读 HotSpot VM 应用的优化技术,并找到了 Oracle 的这个演示文稿,其中列出了 HotSpot VM 尝试内联方法调用时的三个可能条件:

  1. 去虚拟化(证明只有一种目标方法)
  2. 单态内联缓存
  3. 配置文件驱动的内联缓存

通过搜索互联网,我相信我理解这意味着以下内容:

  1. VM“证明”一个类型当前没有子类型。因此,可以将虚拟方法调用转换为允许内联方法代码的非虚拟方法调用。添加了一个保护条件,用于检查执行内联后没有加载任何子类型。

  2. 观察到方法总是在特定调用站点的单一类型上调用。(额外的问题:Java 是否支持多态内联缓存?)这允许执行乐观内联,其中保护条件检查类型是否不是缓存中表示的类型。

  3. 我不知道那是什么。

我的问题是:内联方法调用还有其他主要原因吗?我的研究正确吗?什么是配置文件驱动的内联缓存

4

1 回答 1

2

一个类有多少子类并不重要,唯一重要的是可以从给定的代码行中调用多少方法。例如,一个方法可以有两个跨四个类的实现,但如果只调用一个,就好像这些方法只有一个实现。

根据可以调用的实现数量了解成本。 Java 中内联虚方法调用的性能

配置文件驱动的内联很可能是基于实际调用的方法的内联。

于 2013-12-13T19:02:04.310 回答