Java講座

最適化の章
5.2. ループ内でインスタンス化しない
『目的』

インスタンス化方法を改善してメモリ管理の負荷を下げましょう。

『Before』

ループの内部で一時オブジェクトを生成すると、 メモリを管理するためにより多くの負荷がかかってしまう可能性があります。

これは、ループ内で一時オブジェクトを生成しています。
for (int i = 0; i < max; i++) {
    StringBuffer sb = new StringBuffer();
    sb.append("loop: ");
    sb.append(i);
    System.out.println(sb.toString());
}
毎回StringBufferを作っているためメモリ管理に負荷がかかります。

『After』

ループ外で作ったものをループ内で使い回すようにします。
StringBuffer sb = new StringBuffer();  /* ループ外に出した */
for (int i = 0; i < max; i++) {
    sb.append("loop: ");
    sb.append(i);
    System.out.println(sb.toString());
    sb.setLength(0);  /* 使い回すので内容をクリア */
}
ループを繰り返しても、インスタンスは一つだけなのでメモリ管理に負荷はかかりません。

『まとめ』

使い回せるのであれば、ループ内でインスタンス化するのは控えましょう。
大きなインスタンス(コンストラクタにおける処理コストが大きい)の場合は 実行時間にも差が出てくるでしょう。
前のページ   次のページ

当ページ・当社へのご意見やご感想があればお手数ですが「お問い合わせ」までお願いいたします。
当社への就職をお考えの方は「採用情報ページ」までお願いいたします。
C言語を学びたい方は「C言語講座」もどうぞ。