对于 Java,我非常习惯将所有变量声明为私有(private)变量并生成公共(public) getter 和 setter 以遵守通用约定。
不过,我觉得很好奇:对于除了分配和返回请求的值之外没有任何功能的 getter 和 setter,调用以下方法不会对性能造成影响:
String getValue() {
return value;
}
而不是:
classInstance.value;
编译器是否在这里做了一些事情来帮助防止函数调用添加额外的周期?如果不是,那么这个理论上的打击是否会像滚雪球一样在更强大的应用程序中产生巨大的打击?
编辑:: 需要澄清的是,这个问题并不是问为什么应该或不应该使用访问器方法,问题是使用访问器是否会影响性能。
最佳答案
Does the compiler do something here to help keep the function call from adding an extra cycle?
是的。
Hotspot JIT 编译器将内联短方法,并且简单的 getter 或 setter 足够短以允许这样做。内联方法体消除了参数组装和方法调用的开销,并允许在调用方法的上下文中进一步进行本地优化。
最终结果是,使用 getter 和 setter 不会影响现代 JVM(tm) 的性能
(一些早期的 Android 编译器没有这样做,但这已得到纠正。)
关于java - 通过使用公共(public)变量来提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45637792/