1.什么事内存泄露
内存泄露就是对象不用了,但是无法回收该对象占用的内存。
2.java不是有垃圾回收机制,咋还会发生内存泄露呢?
java的垃圾回收机制就是把无用的对象(GC roots可达与否)用的内存回收,但是垃圾回收不是万能的,在一些场合会出现内存泄露,
长对象持有短对象的引用,
1、静态集合类
1 Static Vector v = new Vector(10); 2 for (int i = 1; i<100; i++) 3 { 4 Object o = new Object(); 5 v.add(o); 6 o = null; 7 }//
静态的hashmap,vetcor,持有的引用,被释放后,依然不能被回收,静态集合生命周期很长,跟应用程序一致,这样它持有的引用一直不会被释放,
2修改set中的对象的属性,这个属性和hashcode有关,这个对象就是不能被回收的垃圾了。因为hashcode变了,这个对象set.reomove(p2)这个对象就找不到了,自然无法删除,就会一直在set中。
http://www.2cto.com/kf/201211/168720.html
3.数据库连接和网络连接没有close掉
4.单例模式中
class A { public static void main() { Singleton.getInstance().setA(new A()); } } class Singleton { A a; public static getInstace() { return new Singleton(); } public setA(A a) { this.A=a; } }
原文:http://www.cnblogs.com/hansongjiang/p/3849535.html