我的问题很简单:
问: Java中编译器内联getter / setter方法的可能性有多大?(显然没有明确的答案,但其他信息将不胜感激)
额外:我知道编译器(标准版和JIT版)总是有可能决定内联方法,而当涉及到getter和setter时,这通常是程序员想要的。
提前致谢。
答案 0 :(得分:3)
编译器(javac)对优化的影响微乎其微, 因为优化发生在运行时。
从JIT开始,是的,它可能迟早会内联。取决于代码的使用程度,所以最初可能会看到函数调用开销,但是当getter / setter被充分调用时,那么它是内联的。
答案 1 :(得分:2)
我想象零(至少在非JIT情况下),因为这些是Java Bean约定并且它们总是需要公开,因此编译器无法预测谁可以调用这些方法。您可能会更改其中一个会破坏内联调用方的实现。没有什么要求它们只需要实现来设置字段。
答案 2 :(得分:2)
编译器可以在方法为final
时内联,并且调用者可以访问访问的字段。然后由编译器来确定该方法是否“足够简单”以进行内联。
在实践中,通常认为设置或获取字段足够简单,因此将内联可访问字段的最终访问者。私人领域的访问者将在他们的申报课程中内联;受保护字段的访问器将在整个声明包和任何派生类中内联; &安培; C。
在运行时,JIT可能会根据对运行代码的分析执行额外的内联。