在我的一個項目中,我不斷壓縮小塊數據。 現在我發現jvm然後增長到6GB內存(駐留(RES)RAM,不共享或虛擬等),然後因內存不足而死亡。 這就好像垃圾收集器從不運行或者如此。 我已經拿出相關的代碼並粘貼在下面。當我運行它(java6,32位linux)時,它增長到1GB內存。 任何人都知道如何減少內存使用量?由java過度使用內存
import java.util.Random;
import java.util.zip.Deflater;
import java.util.zip.Inflater;
class test {
int blockSize = 4096;
Random r = new Random();
public test() throws Exception {
blockSize = 4096;
byte [] data = new byte[blockSize];
for(int index=0; index<blockSize; index++)
data[index] = (byte)r.nextInt();
for(long cnt=0; cnt<1000000; cnt++) {
byte [] result = compress(data);
if (result != null)
data[0] = result[0];
}
}
byte [] compress(byte [] in) {
assert in.length == blockSize;
Deflater compresser = new Deflater();
compresser.setInput(in);
compresser.finish();
byte [] out = new byte[in.length];
int outLen = compresser.deflate(out);
if (outLen < blockSize) {
byte [] finalOut = new byte[outLen];
System.arraycopy(out, 0, finalOut, 0, outLen);
return finalOut;
}
return null;
}
public static void main(String [] args) throws Exception {
new test();
}
}
該死的,這總是發生:我一直在尋找答案的小時,所以我發佈了一個問題的地方。然後突然在5分鐘內我自己找到了答案。 解決方法是...在壓縮數據後調用壓縮器的end()! – 2011-06-08 06:32:09
請發佈這個答案。通過這種方式,它可以被投票,未來的這個問題的訪問者會更容易找到它。 – 2011-06-08 06:51:42