Javaでメモリリーク

大学の研究の関係で、いろいろなことを順番に処理させたいってことがあります。そんなときに、こんなコードを書くとえらい目に遭います。

public static void main(String[] args){
    List<Executable> list = getTasks();
    for(Executable e:list){
        e.execute();
    }
}

これは、ただ単にリストの中身を実行してるだけなんですが、もしこのExecutableクラス中で大きなデータを保持したまま終了するようなソースを書いていた場合、いくらメモリがあっても足りません。そんなわけで、実行したあとのいらないインスタンスはさっさと切り離した方がベターです。

public static void main(String[] args){
    List<Executable> list = getTasks();
    for(Iterator<Executable> it = list.iterator();it.hasNext();){
        e.execute();
        it.remove();
    }
}

Enumerationインターフェースが推奨されない理由はここにあるのかもしれませんね。Collectionインターフェースを実装してるクラスでは、iteration中の要素の削除は例外のもとだし。

トラックバック(0)

このブログ記事を参照しているブログ一覧: Javaでメモリリーク

このブログ記事に対するトラックバックURL: http://trialpc.net/mt/mt-tb.cgi/554

コメントする

Advertizement

このブログ記事について

このページは、tetsuが2005年10月17日 00:40に書いたブログ記事です。

ひとつ前のブログ記事は「JVMのオプション」です。

次のブログ記事は「パソコンバトン」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.0

最近のコメント

カウンタ

リンク