编译器内联的getter和setter的概率

时间:2011-12-26 22:52:49

标签: java performance compiler-construction jit

我的问题很简单:

问: Java中编译器内联getter / setter方法的可能性有多大?(显然没有明确的答案,但其他信息将不胜感激)

额外:我知道编译器(标准版和JIT版)总是有可能决定内联方法,而当涉及到getter和setter时,这通常是程序员想要的。

提前致谢。

3 个答案:

答案 0 :(得分:3)

编译器(javac)对优化的影响微乎其微, 因为优化发生在运行时。

从JIT开始,是的,它可能迟早会内联。取决于代码的使用程度,所以最初可能会看到函数调用开销,但是当getter / setter被充分调用时,那么它是内联的。

答案 1 :(得分:2)

我想象零(至少在非JIT情况下),因为这些是Java Bean约定并且它们总是需要公开,因此编译器无法预测谁可以调用这些方法。您可能会更改其中一个会破坏内联调用方的实现。没有什么要求它们只需要实现来设置字段。

答案 2 :(得分:2)

编译器可以在方法为final时内联,并且调用者可以访问访问的字段。然后由编译器来确定该方法是否“足够简单”以进行内联。

在实践中,通常认为设置或获取字段足够简单,因此将内联可访问字段的最终访问者。私人领域的访问者将在他们的申报课程中内联;受保护字段的访问器将在整个声明包和任何派生类中内联; &安培; C。

在运行时,JIT可能会根据对运行代码的分析执行额外的内联。