Java的静态/实例变量操作性能

时间:2011-12-31 06:18:41

标签: java static instance

在阅读Jack Shirazi的“Java性能调优”时,我发现了以下声明:

“实例和静态变量在运行时可能会慢一个数量级 与方法参数和局部变量相比。“

这仍然适用于Java 6/7吗?如果是的话,背后的原因是什么? (他解释了有关访问局部变量/参数的特殊字节码,但我不明白)。

2 个答案:

答案 0 :(得分:9)

这里的关键词是可以是。问题是locals和params(本质上是本地人的一种)可能在寄存器中,而实例和静态变量最终会在内存中结束(它们会进入寄存器所需的时间到对它们进行操作,但最终回到它们的记忆中。)

答案 1 :(得分:3)

即使访问速度慢了10倍,只要你处于一个很长的循环中,这才有意义。关于优化对实例变量的内存访问,Java内存模型非常聪明(有时“太”聪明)。如果你在一个长循环中使用一个实例var,比如总和100,000个双精度,那么JVM很可能会优化该访问,事实上,每次都会将结果写入内存。例外是volatile字段。事实上,整个优化问题就是为什么存在易失性字段。