下一页 1 2 3
如果您频繁存取变量,就需要考虑从何处存取这些变量。变量是 static 变量,还是堆栈变量,或者是类的实例变量?变量的存储位置对存取它的代码的性能有明显的影响?例如,请考虑下面这段代码: class StackVars
{
private int instVar;
private static int staticVar;
//存取堆栈变量
void stackAclearcase/" target="_blank" >ccess(int val)
{
int j=0;
for (int i=0; i<val; i++)
j += 1;
}
//存取类的实例变量
void instanceAccess(int val)
{
for (int i=0; i<val; i++)
instVar += 1;
}
//存取类的 static 变量
void staticAccess(int val)
{
for (int i=0; i<val; i++)
staticVar += 1;
}
}
这段代码中的每个方法都执行相同的循环,并反复相同的次数。唯一的不同是每个循环使一个不同类型的变量递增。方法 stackAccess 使一个局部堆栈变量递增,instanceAccess 使类的一个实例变量递增,而 staticAccess 使类的一个 static 变量递增。
instanceAccess 和 staticAccess 的执行时间基本相同。但是,stackAccess 要快两到三倍。存取堆栈变量如此快是因为,JVM 存取堆栈变量比它存取 static 变量或类的实例变量执行的操作少。请看一下为这三个方法生成的字节码:
Method void stackAccess(int) |