程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Deflater/Inflater可能造成Native Memory Leak

Deflater/Inflater可能造成Native Memory Leak

編輯:關於JAVA
 

Deflater/Inflater如使用不當,將有可能造成native memory leak,下面是一段示例的代碼:

import java.util.zip.*;

public class Bug {
public static void main( String args[] ) throws Exception{
for(int i=0;i<100;i++){
new Thread(new Runnable(){
public void run(){
for(int i=0;i<200;i++){
Deflater deflater = new Deflater( 9, true );
//deflater.end();
}
byte[] bytes1=new byte[1024*512];
byte[] bytes2=new byte[1024*512];
byte[] bytes3=new byte[1024*512];
byte[] bytes4=new byte[1024*512];
byte[] bytes5=new byte[1024*512];
byte[] bytes6=new byte[1024*512];
byte[] bytes7=new byte[1024*512];
byte[] bytes8=new byte[1024*512];
}
}).start();
Thread.sleep(1);
}
Thread.sleep(30000);
}
}

用-Xmn10m運行上面的代碼,可以看到即使在觸發了minor gc和full gc後,Java進程占用的地址空間也不會降下去,而當主動調用deflater.end後,再次運行上面的代碼,則可看到Java進程占用的地址空間就比較少了,因此在使用Deflater/Inflater時,一定要記得在不需要用了時主動的調用下end方法,就像使用FileInputStream之類的一樣。
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved