最適化の章
5.2. ループ内でインスタンス化しない
『目的』
インスタンス化方法を改善してメモリ管理の負荷を下げましょう。
『Before』
ループの内部で一時オブジェクトを生成すると、 メモリを管理するためにより多くの負荷がかかってしまう可能性があります。
これは、ループ内で一時オブジェクトを生成しています。
for (int i = 0; i < max; i++) { StringBuilder sb = new StringBuilder(); sb.append("loop: ") .append(i); System.out.println(sb.toString()); }
毎回StringBuilderを作っているためメモリ管理に負荷がかかります。
『After』
ループ外で作ったものをループ内で使い回すようにします。
StringBuilder sb = new StringBuilder(); /* ループ外に出した */ for (int i = 0; i < max; i++) { sb.append("loop: ") .append(i); System.out.println(sb.toString()); sb.setLength(0); /* 使い回すので内容をクリア */ }
ループを繰り返しても、インスタンスは一つだけなのでメモリ管理に負荷はかかりません。
『まとめ』
使い回せるのであれば、ループ内でインスタンス化するのは控えましょう。
大きなインスタンス(コンストラクタにおける処理コストが大きい)の場合は 実行時間にも差が出てくるでしょう。
-
IS 559680 / ISO27001
認証範囲 本社、芝大門オフィス情報セキュリティ基本方針 -
個人情報保護方針
個人情報の取扱いについて
保有個人データ又は
第三者提供記録に関する
事項の周知について
特定個人情報の取扱いについて -
FS 671851 / ISO9001
認証範囲 本社、芝大門オフィス品質方針