【问题标题】:Are forwarded methods inlined by JIT in Java?Java中的JIT是否内联了转发方法?
【发布时间】:2015-02-05 19:22:17
【问题描述】:

是否以

的形式进行JIT内联方法
public void forwardCall(int argument) {
    MyStaticClass.forwardCallTarget(argument);
}

假设转发类没有派生类或基类(forwardCall 方法是准最终的)。

我在网上看到很多关于内联 getter/setter 的讨论,但关于方法转发的讨论不多。

【问题讨论】:

  • 使用-XX:+PrintInlining 看看!
  • 转发在概念上并没有什么特别之处,那么它为什么值得额外提及呢?我认为您真正想知道的是 JIT 是否可以跨多个调用级别内联? (嵌套内联)
  • 是的,从 JITC 的角度来看,这只是代码。几乎所有现代 JITC 都可以内联多个级别,所以这实际上只是统计数据是否使其看起来有利可图的问题。

标签: java


【解决方案1】:

按照建议使用 PrintInlining,我可以看到 JIT 确实可以内联多个级别。我测试了 3 个级别(常规方法 -> 静态方法 -> 本机方法),Java 1.7。

很高兴知道:)

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 2010-11-23
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2021-11-15
    • 2021-04-04
    相关资源
    最近更新 更多