Java内存泄漏
Posted wencenty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java内存泄漏相关的知识,希望对你有一定的参考价值。
1、什么是内存泄漏
当某些对象不再被应用程序所使用,但是由于仍然被引用而导致垃圾收集器不能释放(Remove,移除)
2、引起内存泄漏的原因
长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露(老年代引用新生代)
2.1 当集合里面的对象属性被修改后,由于hashcode改变当再调用remove()方法时不起作用
1 import java.util.HashSet; 2 import java.util.Set; 3 4 /** 5 * Created by xiaoxiao7 on 2016/11/9. 6 */ 7 public class Test01 { 8 9 public static void main(String[] args) { 10 Set<String> set = new HashSet<String>(); 11 String str1 = new String("aaa"); 12 String str2 = new String("bbb"); 13 String str3 = new String("ccc"); 14 set.add(str1); 15 set.add(str2); 16 set.add(str3); 17 System.out.println("Before: " + set.size()); 18 str3 = "ddd"; 19 set.remove(str3); 20 set.add(str3); 21 System.out.println("After: " + set.size()); 22 for (String str : set) { 23 System.out.println(str); 24 } 25 } 26 }
2.2 静态集合类引起内存泄漏
1 import java.util.HashSet; 2 import java.util.Set; 3 import java.util.Vector; 4 5 /** 6 * Created by xiaoxiao7 on 2016/11/9. 7 */ 8 public class Test01 { 9 10 static Vector v = new Vector(10); 11 12 public static void main(String[] args) { 13 for (int i = 1; i<100; i++) 14 { 15 Object o = new Object(); 16 v.add(o); 17 o = null; 18 } 19 } 20 }
以上是关于Java内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章