2013-09-23 90 views
0

我在加密Java文件時遇到內存泄漏問題。Java AES文件加密內存問題

以下是增加應用程序的內存使用情況的代碼,完成後它不會釋放已使用的內存。

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(),則內存不會增長。

+1

請注意,無法確切地確定垃圾收集何時發生。你是否真的看到了內存問題(如OutOfMemory異常)?如果不是這樣,它可能是好的,JVM會在需要時回收內存。 – Aurand

+0

你是對的,但是當我用GB將大量文件轉化爲GB時,我沒有看到任何內存不足問題,但是我的16 GB RAM系統的內存使用量超過了4 GB。是的,我等了幾個小時,但記憶從未回收。 – user2319247

回答

0

我會建議這樣做。將此代碼放在單獨的方法調用中。然後從主方法的循環中調用相同的方法。

同時關注堆內存使用情況。經過一些很好的迭代(例如1000)後,您應該能夠達到較高的內存佔用率。然後看看,如果GC正在發生或沒有。

內存泄漏的一個很好的症狀是,使用的內存平均持續飆升。