【问题标题】:What is the size of methods that JIT automatically inlines?JIT 自动内联的方法的大小是多少?
【发布时间】:2016-08-03 18:33:03
【问题描述】:

我听说 JIT 会自动内联小方法,例如 getter(它们大约有 5 个字节)。边界是什么?有JVM标志吗?

【问题讨论】:

    标签: java jvm jit jvm-hotspot


    【解决方案1】:

    HotSpot JIT 内联策略相当复杂。它涉及许多启发式方法,如调用方方法大小、被调用方方法大小、IR 节点数、内联深度、调用数、调用站点数、抛出数、方法签名等。

    访问器方法(getter/setter)和普通方法(字节码计数小于 6)会跳过一些限制。

    相关源码大多在bytecodeInfo.cpp.
    请参阅InlineTree::try_to_inlineshould_inlineshould_not_inline 函数。

    控制内联的主要 JVM 标志是

    -XX:MaxInlineLevel (maximum number of nested calls that are inlined)
    -XX:MaxInlineSize (maximum bytecode size of a method to be inlined)
    -XX:FreqInlineSize (maximum bytecode size of a frequent method to be inlined)
    -XX:MaxTrivialSize (maximum bytecode size of a trivial method to be inlined)
    -XX:MinInliningThreshold (min. invocation count a method needs to have to be inlined)
    -XX:LiveNodeCountInliningCutoff (max number of live nodes in a method)
    

    【讨论】:

      【解决方案2】:

      https://docs.oracle.com/javase/8/embedded/develop-apps-platforms/codecache.htm#BABGGHJE

      MaxInlineSize

      默认值:35

      要内联的方法的最大字节码大小

      请参阅文档Java HotSpot VM Options 了解 JDK 7 及更早版本。

      【讨论】:

      • @Louis Wasserman 谢谢。我知道那件事。我以为有“MinAutoInlineSize”之类的东西,但我可能错了。
      • @jpos 为什么会有最低要求?方法越小越好内联。
      猜你喜欢
      • 2014-07-14
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多