1
5
Java JITC将尝试内联任何看起来(基于运行时统计数据)足够频繁调用的函数。无论函数是在一个地方调用,还是在几十个地方调用——每个调用站点都是单独分析的。 请注意,该决定基于几个因素。这个方法有多大是一个问题——如果有很多潜在的内联候选项,只有最有利可图的才会被内联,以避免“代码膨胀”。但电话频率(乘以电话的感知费用)是最大的“得分”因素。 阻碍内联的一件事是明显的多态调用。如果有电话 可以 如果到达的类不是预期的类,那么它必须由执行原始调用的代码“保护”。如果统计数据证明一个调用经常是多态的(并且包括所有多态变体是不值得的),那么内联很可能没有足够的利润。静态或最终方法是最有吸引力的,因为它不需要保护。 奇怪的是,另一个阻碍内联(以及许多其他东西)的因素是无法从方法返回。如果您有一个输入的方法,然后在内部循环1000万次而不返回,JITC永远不会有机会“交换”解释的方法和“交换”编译的方法。但JITC在一定程度上克服了这一点,只使用了编译方法的一部分的技术,其余部分则被解释。 |
2
4
为了将来的参考,您可以使用
回答您的问题:Java 编译器 不内联方法。另一方面,JVM分析您的代码,并在必要时在运行时内联。基本上,您不必担心它——将它留给JVM,如果它发现它有益,它将内联。在这些方面,JVM通常比您更聪明。 从…起 http://www.oracle.com/technetwork/java/whitepaper-135217.html#method :
|