关于从java书籍中内联调用

关于从java书籍中内联调用,java,effective-java,Java,Effective Java,我在这本书里有个问题, “现代Java虚拟机(JVM)实现几乎肯定会内联调用静态工厂方法”的意思是什么 我不理解“内联调用静态工厂方法” 引述: 公共领域方法的主要优点是 声明清楚地表明该类是一个单例:public 静态字段是最终字段,因此它将始终包含相同的对象 参考资料。对公众来说,性能不再有任何优势 现场方法:现代Java虚拟机(JVM)实现是 几乎肯定会内联调用静态工厂方法 “公共领域方法”是(摘自本书): 虽然您在报价中提到的方法是静态工厂: // Singleton with stat

我在这本书里有个问题, “现代Java虚拟机(JVM)实现几乎肯定会内联调用静态工厂方法”的意思是什么 我不理解“内联调用静态工厂方法”

引述:

公共领域方法的主要优点是 声明清楚地表明该类是一个单例:public 静态字段是最终字段,因此它将始终包含相同的对象 参考资料。对公众来说,性能不再有任何优势 现场方法:现代Java虚拟机(JVM)实现是 几乎肯定会内联调用静态工厂方法

“公共领域方法”是(摘自本书):

虽然您在报价中提到的方法是静态工厂:

// Singleton with static factory
public class Elvis {
    private static final Elvis INSTANCE = new Elvis();
    private Elvis() { ... }
    public static Elvis getInstance() { return INSTANCE; }

    public void leaveTheBuilding() { ... }
}

您提到的引文解释了静态工厂方法的“性能惩罚”(因为我们调用的是一个方法
getInstance
,而不是通过:
Elvis.INSTANCE
)直接使用该字段)不再存在(或者,这种可能性很低)由于编译器足够聪明,可以将调用内联到已编译的字节码中,因此两种方法的性能相似,而第二种方法的性能更好,因为它提供了封装。

多了解一点上下文确实有帮助。作者所说的编译到字节码,从字节码JIT编译,或者VMs在解释过程中可能进行的某些字节码优化。如果您引用的是一本书,请根据需要提供完整的引用和额外的上下文。这有点离题,但这本书是为经验丰富的java程序员编写的。公共字段方法的主要优点是声明清楚地表明该类是一个singleton:公共静态字段是最终字段,因此它将始终包含相同的对象引用。公共域方法不再具有任何性能优势:现代Java虚拟机(JVM)实现几乎肯定会内联调用静态工厂方法。
// Singleton with static factory
public class Elvis {
    private static final Elvis INSTANCE = new Elvis();
    private Elvis() { ... }
    public static Elvis getInstance() { return INSTANCE; }

    public void leaveTheBuilding() { ... }
}