知っていると便利な章
4.10. 初期容量を定める
『目的』
初期容量設定を設定してパフォーマンスを向上させましょう。
『Before』
これは、初期容量を設定していません。
private List<Object> v = new ArrayList<>(); // 初期容量未設定 public void addObjects(Object[] o) { // デフォルトの容量よりも配列が長い場合は List サイズを拡張しなければならない for (Object obj : o) { v.add(obj); } }
100000回の繰り返し処理で7.3ms要しました。
配列の容量を拡張すると、より広範な配列が割り当てられて古い配列の内容が 新しい配列にコピーされます。その結果、ガベージコレクタによって 古い配列オブジェクトが再生されます。配列の拡張には時間がかかります。
『After』
初期容量を適切に定めることで容量確保の為のオーバーヘッドを無くすことができます。
private List<Object> v = new ArrayList<>(100000); // 初期容量設定 public void addObjects(Object[] o) { for (Object obj : o) { v.add(obj); } }
100000回の繰り返し処理は 4.7msで済みました。
『まとめ』
初期容量が予め推測できるのであればパフォーマンスの向上のために設定しましょう。
< 前のページへ 次のページへ >-
IS 559680 / ISO27001
認証範囲 本社、芝大門オフィス情報セキュリティ基本方針 -
個人情報保護方針
個人情報の取扱いについて
保有個人データ又は
第三者提供記録に関する
事項の周知について
特定個人情報の取扱いについて -
FS 671851 / ISO9001
認証範囲 本社、芝大門オフィス品質方針