【问题标题】:Conditions for inlining methods by the HotSpot VMHotSpot VM 内联方法的条件
【发布时间】:2013-12-13 18:45:13
【问题描述】:

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

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

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

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

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

  3. 我不知道那是什么。

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

【问题讨论】:

    标签: java compiler-optimization inlining


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答和链接。您知道 JVM 完成的配置文件驱动内联的参考吗?
    • @raphw 这是关于 JVM 内部的最佳 wiki wiki.openjdk.java.net
    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 2017-10-24
    • 2012-01-23
    • 2018-06-11
    • 1970-01-01
    • 2011-06-25
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多