我一直在尝试优化我的一些代码,并且我对 fors 得出了一个奇怪的结论。
在我的测试用例中,我创建了一个具有主要活动的新项目。该活动初始化一个包含 500 个对象的列表,运行显式 GC 并启动线程。线程循环函数doCalculations。
this.objects 是 500 个 MyObject 的列表,previous 是 MyObject,value 是 int。功能逻辑没有逻辑,它们只是在那里做事。区别在于内部。
功能1
public void doCalculations()
{
for(MyObject o : this.objects)
for(int i=0; i<this.objects.size(); i++)
if(this.objects.get(i) == o)
o.value = this.objects.get(i).value;
}
功能二
public void doCalculations()
{
for(MyObject o : this.objects)
for(MyObject o2 : this.objects)
if(o2 == o)
o.value = o2.value;
}
使用功能 2 GC 在我的 nexus 上每 ~10 秒调用一次,释放 ~1.7MB。
使用功能 1 GC 永远不会被看到。
这是为什么?