0

Javaでファイルを暗号化する際にメモリリークを見つけるのに苦労しています。

次のコードは、アプリのメモリ使用量を増加させ、完了後に使用済みメモリを解放しません。

   while (bytesRead > 0) {
        cout.write(buffer, 0, bufferSize);
        md.update(buffer, 0, bufferSize);

        bytesAvailable = fin.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);

        bytesRead = fin.read(buffer, 0, bufferSize);

        readSoFar += bytesRead;
        cout.flush();

    }

推奨されていない System.gc() を反復ごとに配置すると、メモリは増加しません。

4

1 に答える 1

0

これを行うことをお勧めします。このコードを別のメソッド呼び出しに入れます。次に、メイン メソッドからループ内で同じメソッドを呼び出します。

その間、ヒープメモリの使用状況を監視してください。かなりの回数 (たとえば 1000 回) 繰り返した後、高いメモリ占有率に達することができるはずです。次に、GC が発生しているかどうかを監視します。

メモリ リークの良い兆候は、使用済みメモリが平均して急増し続けることです。

于 2013-09-23T04:50:36.043 に答える