易截截图软件、单文件、免安装、纯绿色、仅160KB

什么样的java代码容易memory leak?

很多developer知道java也可能memory leak,关于这个主题已经有很多文章了。我这里只想分享一下自己的memory leak的经验。
说明一下这里指的memory leak是程序不及时释放heap导致的OutOfMemoryError.
首先一种情况是collection或者是map一直被put数据,没有机会remove,导致OutOfMemoryError。尤其是当collection或者是map被设计成static变量的时候,它就是个global性质的变量,很可能永远不会被赋为null。这也是不建议使用static变量的一个原因。
有人会察觉到就算collection赋为null,元素还是可能未被释放:
Object o= new Object ();
ArrayList<Object > l=new ArrayList<Object >();
 l.add(o);
 l=null;
System.out.println(o==null);// "false" will be printed
原因在于这个o 还是可能被程序reference到。而一般情况下我们遇到的是:
 l.add(new Object ());
在这种情况下,l=null, o也被GC了。
我也看到有文章提到在listener的模式下,如果listener一直在注册register而没有机会remove也会导致OutOfMemoryError。其实listener也是一个list的结构,本质上是一样的。很多listener是以匿名类被构造和注册到被监听类上面去的, 而被监听类如果也没有正确remove注册的listener的话也会导致OutOfMemoryError。


相关文档:

java核心教程笔记

1.接口与抽象类区别
      abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
  在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员 ......

java第7天代码 (java异常)

/*****************TestCar1  begin************************/
public class TestCar1 {
 
 public static final int Ok=1;     //正常情况
 public static final int Wrong=2;  //异常情况
 
 public int run(){
  if("车子没有出现故障"){  ......

Java读取图片文件的宽度和高度

InputStream is = new FileInputStream(filename);//通过文件名称读取

InputStream is =new ByteArrayInputStream(byte[] a);//通过文件的字节数组读取
BufferedImage buff = ImageIO.read(is);
buff.getWidth(); //得到图片的宽度
buff.getHeight();  //得到图片的高度
is.close(); //关闭Stream ......

Java中替换双引号

 
//Java中把"替换为\" message="\"book\"";
System.out.println(message);
需要五个
message=message.replaceAll("\"","\\\\\"");
System.out.println(message); ......

base64 编解码的 Java 实现

/**
* Base64Util for Java
* cheungmine
* 2009-11-8
*/
public class Base64Util {
/**
* @param args
*/
public static void main(String[] args)
{
// 源字节数组
int cb = 0;
System.out.print("源字节数组: ");

byte in[] = new byte[100];
in[cb++]='1';
i ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号