易截截图软件、单文件、免安装、纯绿色、仅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初学问题

   自己学习Java已经有一个月左右了~~对一些java也有一些感受~~
当看到这篇文章时,发现还可以~~就转来和大家分享一下~~~
1 什么是Java、Java2、JDK?JDK后面的1.3、1.4.2版本号又是怎么回事?
答:Java是一种通用的,并发的,强类型的,面向对象的编程语言
(摘自Java规范第二版) JDK是Sun公司分发的免费Ja ......

java核心教程笔记

1.private修饰方法不能被外部类调用。
2.final修饰的对象构建后不能被修改。
扩展:
final类不能被继承,没有子类,final类中的方法默认是final。
final不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
final函数参数无法被改变。
父 ......

Java面试题:String类的concat方法


编译并运行下面的程序,其结果是什么?
  public class MyClass {
  public static void main(String[] args) {
  String str1 = "str1";
  String str2 = "str2";
  String str3 = "str3";
  str1.concat(str2);
  System.out.println(str3.concat(str1));
  }
  }
  请选择正确的答案。 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号