私は自分のコードのいくつかを最適化しようとしてきましたが、iveはforsに関して奇妙な結論に達しました。
私のテストケースでは、iveはメインアクティビティを含む新しいプロジェクトを作成しました。このアクティビティは、500個のオブジェクトのリストを初期化し、明示的なGCを実行して、スレッドを開始します。スレッドは関数doCalculationsをループします。
this.objectsは500MyObjectのリストで、前はMyObject、値はintです。関数ロジックにはロジックがなく、何かをするためだけにあります。違いはの内側にあります。
function1
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;
}
機能2
public void doCalculations()
{
for(MyObject o : this.objects)
for(MyObject o2 : this.objects)
if(o2 == o)
o.value = o2.value;
}
関数2を使用すると、GCは私のネクサスで約10秒ごとに呼び出され、約1.7MBを解放します。
機能1では、GCは表示されません。
何故ですか?