HotSpot VM内联方法的条件

时间:2013-12-13 18:45:13

标签: java compiler-optimization inlining

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

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

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

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

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

  3. 我找不到那是什么。

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

1 个答案:

答案 0 :(得分:2)

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

根据可以调用的实现数量了解成本。 Performance of inlined virtual method invocations in Java

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