2013-09-23 49 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正在发生或没有。

内存泄漏的一个很好的症状是,使用的内存平均持续飙升。