Java';s静态/实例变量操作性能

Java';s静态/实例变量操作性能,java,static,instance,Java,Static,Instance,在阅读Jack Shirazi的“Java性能调优”时,我遇到了以下语句: “在以下情况下,实例和静态变量的操作速度可能会慢一个数量级: 与方法参数和局部变量相比。” 这是否仍然适用于Java6/7?如果是,背后的原因是什么?(他解释了一些关于使用特殊字节码来访问局部变量/参数的事情,但我不理解)。这里的关键词是can be。问题是,局部变量和参数(本质上是局部变量的一种)可能在寄存器中,而实例和静态变量最终将在内存中结束(它们将进入寄存器进行操作所需的时间,但最终返回到它们所在的内存中)。即使

在阅读Jack Shirazi的“Java性能调优”时,我遇到了以下语句:

“在以下情况下,实例和静态变量的操作速度可能会慢一个数量级: 与方法参数和局部变量相比。”


这是否仍然适用于Java6/7?如果是,背后的原因是什么?(他解释了一些关于使用特殊字节码来访问局部变量/参数的事情,但我不理解)。

这里的关键词是can be。问题是,局部变量和参数(本质上是局部变量的一种)可能在寄存器中,而实例和静态变量最终将在内存中结束(它们将进入寄存器进行操作所需的时间,但最终返回到它们所在的内存中)。

即使访问速度慢了10倍,只有当你处于一个很长的循环中时,这才有关系。Java内存模型在优化对实例变量的内存访问方面非常聪明(有时“太”聪明)。如果在长循环中使用实例变量,比如说,求和100000倍,JVM很可能会优化该访问,事实上,不会每次都将结果写入内存。异常是易失性字段。事实上,这整个优化问题就是为什么会有不稳定的字段