我听说 JIT 自动内联小型方法,例如 getter(它们大约有 5 个字节)。边界是什么?有 JVM 标志吗?
HotSpot JIT 内联策略相当复杂。它涉及许多启发式方法,例如调用方方法大小、被调用方方法大小、IR 节点计数、内联深度、调用计数、调用站点计数、抛出计数、方法签名等。
对于访问器方法(getter/setter)和普通方法(字节码计数小于 6),会跳过一些限制。
相关源码主要在字节码信息.cpp http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/448a5dcf414f/src/share/vm/opto/bytecodeInfo.cpp#l311.
See InlineTree::try_to_inline
, should_inline
, should_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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)