Tho*_*hle 2 java memory compiler-construction performance vm-implementation
我正在阅读SparseArrayandroid中的类,并遇到了以下方法:
public void removeAt(int index) {
if (mValues[index] != DELETED) {
mValues[index] = DELETED;
mGarbage = true;
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这也可以写成:
public void removeAt(int index) { Or public void removeAt(int index) {
if (mValues[index] != DELETED) { mValues[index] = DELETED;
mValues[index] = DELETED; mGarbage = true;
if (!mGarbage) }
mGarbage = true;
}
}
Run Code Online (Sandbox Code Playgroud)
似乎Android开发人员认为数组查找mValues[index]比数组写入更快,但变量查找并不比变量写入快.
这是真的吗?它取决于VM,还是编译语言的常识?
当然右侧版本不等同 - 因为无论值是否发生变化,mGarbage都设置为true .
左边相当于原版,但没有意义.
基本上我认为你错过了检查现有值是否允许DELETED的副作用:只有当方法实际上有效时才允许mGarbage设置为true .这与从数组中读取的性能无关.