2014年6月15日 星期日

ArrayList.add()的兩種方式的效能差異

下面有兩個迴圈.......(limit2是1000,但其實可以隨便寫。)

for(int k = 0 ; k < limit2 ; k++){
  for(int l = 0 ; l < limit2 ; l++){
    Integer irt = new Integer(l);
    list1.add(irt);
  }
  list1.clear();
}

for(int k = 0 ; k < limit2 ; k++){
  for(int l = 0 ; l < limit2 ; l++){
    list1.add(new Integer(l));
  }
  list1.clear();
}
看出差異了嗎?

下面的效能大概比上面的效能快了兩成左右。

「宣告一塊記憶體位址」然後再「產生一塊實作」,佔去的效能要比「不宣告」多兩成左右。

(所以造成效能差異的關鍵並不在ArrayList本身。)



沒什麼意義。

因為我把迴圈擴大(外頭在加兩層迴圈,)總共執行了1000 * 1000 * 1000次的『「宣告一塊記憶體位址」然後再「產生一塊實作」』,和1000 * 1000 * 1000次的『「不宣告」直接「產生一塊實作」』,這樣才看的出有兩成左右的效能差異。

應該很少有人沒事會去在Java上操作這麼大的ArrayList吧!(即使「有事」也不會作,因為記憶體會掛掉。大家會想別的辦法達到同樣的效果。)

沒有留言:

張貼留言