0

私のプログラムでは、1000 以上のファイルの MD5 ハッシュをチェックする必要がありますが、残念ながら、何らかの理由で巨大なメモリ リークが発生します。コードを最適化する方法はありますか?

FastMD5 、 java.nio 、 java.io などを試しました。問題は実際のコードではありません

        File[] directory = new File("/PATH/TO/FOLDER/WITH/LOTS/OF/FILES").listFiles();

        for(int i = 0; i < directory.length;i++){

        System.out.println(MD5.asHex(MD5.getHash(directory[i])));

        } 
4

2 に答える 2

1

私は、あなたの現在のコードが使用している FastMD5 ライブラリの作成者です。これをあなたの質問にコメントとして追加しようとしましたが、スタック オーバーフローは長すぎると言っているので、回答として投稿し、問題を理解できるようになることを願っています。エラーを再現しようとしましたが、提供されたサンプルコードはうまくいきました。次のように、10,000 個のファイルを含むディレクトリを作成しました。

# mkdir bigdir

# $I=0 ; while test $I -lt 10000 ; do echo $I > bigdir/$I ; done

コードを実行すると、予想どおり 10,000 個のハッシュが出力され、JVM は正常に終了しました。

取得している特定のスタック トレースを投稿できますか? MD5 の計算中にメモリ リークが発生しているのは偶然の一致であり、メモリ リークは別の場所にある可能性があると思います。OS 固有のバグに遭遇した場合に備えて、別の OS でコードを試すこともできますか?

「~/Downloads/」フォルダーでコードを最初に試したときに気づいたことの 1 つは、実際にはディレクトリ自体であるディレクトリ リスト内の項目に遭遇したときに、IOException がスローされたことです。したがって、そのディレクトリにファイル以外の何かがあり、それが問題を引き起こしている可能性があります (たとえば、無限ループのシンボリックリンク、再解析ポイントなど)。

于 2013-09-04T18:38:51.443 に答える