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内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

FragmentStatePagerAdapter 内存泄漏(带有 viewpager 的嵌套片段)

带有 UI 和内存泄漏的保留片段

在片段中保存活动实例:是否会导致内存泄漏?

片段 - 全局视图变量与本地和内部类侦听器和内存泄漏

iPhone内存泄漏问题?

使用导致内存泄漏的音频片段