小知识: 在开发中,使用临时变量去操作比直接使用成员变量或静态变量更高效(尤其是当操作量大的时候)。
测试:
public class VariableTest {
private int value; //成员变量
private static int staticValue; //静态变量
/** 直接操作成员变量 */
private void instanceCall(int count) {
long startTime = System.currentTimeMillis();
for(int i = 0 ; i < count; i++) {
value += 1;
}
long endTime = System.currentTimeMillis();
System.out.println("实例成员变量操作时间:" + (endTime - startTime) + " ms" + value);
}
/** 使用临时变量 */
private void tempCall(int count) {
int temp = value;
long startTime = System.currentTimeMillis();
for(int i = 0 ; i < count; i++) {
temp += 1;
}
value = temp;
long endTime = System.currentTimeMillis();
System.out.println("临时变量操作时间:" + (endTime - startTime) + " ms" + value);
}
/** 直接操作静态变量 */
private void staticCall(int count) {
long startTime = System.currentTimeMillis();
for(int i = 0 ; i < count; i++) {
staticValue += 1;
}
long endTime = System.currentTimeMillis();
System.out.println("静态变量操作时间:" + (endTime - startTime) + " ms" + staticValue);
}
public void resetValue() {
this.value = 0;
this.staticValue = 0;
}
public static void main(String[] args) {
VariableTest test = new VariableTest();
System.out.println("操作次数:" + Integer.MAX_VALUE);
test.staticCall(Integer.MAX_VALUE);
test.instanceCall(Integer.MAX_VALUE);
test.resetValue();
test.tempCall(Integer.MAX_VALUE);
}
}
输出结果:
操作次数:2147483647
静态变量操作时间:59 ms
实例成员变量操作时间:79 ms
临时变量操作时间:2 ms
根据结果可以发现使用临时变量明显效率更高,而静态变量和成员变量相差不大。
那么为什么会这样呢?
这和他们存放在虚拟机中的位置有关, 实例成员变量存放在堆区、静态变量存放在方法区中的静态域中 而 临时变量是在虚拟机栈中。
每个方法在执行时会创建一个栈帧用于存储:局部变量表、操作数栈、动态链接、方法出口信息。 方法的调用到完成的过程即为一个栈帧的入栈到出栈的过程。
而在 jvm 中栈中的数据存取比堆要快,所以使用临时变量是可以提高运行效率的!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于