java - 通过使用公共(public)变量来提高性能?

标签 java variables optimization compiler-construction

对于 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/

相关文章:

java - 为什么java允许私有(private)String[][]var[]

Java - 检查变量是否等于任何数组元素

optimization - 继续循环 if 语句内 vs. 在循环内使用 if 语句的否定

java - 如何使用 Runtime.freeMemory() 和 GC 跟踪 JVM 上的任何对象实例化

R 优化返回错误值

java - 键 'PRIMARY' 的重复实体

java - Java 可以从类型参数边界推断类型参数吗?

java - 如何为文件添加签名?

java - Swing MacBook 无效显示模式

python - 在打印变量类型时,如何在 Tensorflow 中获得 pretty-print 结果?