- 非静态内部类的静态实例
由于内部类默认持有外部类的引用,而静态实例属于类。所以,当外部类被销毁时,内部类仍然持有外部类的引用,致使外部类无法被GC回收。因此造成内存泄露。 -
类的静态变量持有大数据对象
静态变量长期维持到大数据对象的引用,阻止垃圾回收。 -
资源对象未关闭
资源性对象如Cursor、Stream、Socket,Bitmap,应该在使用后及时关闭。未在finally中关闭,会导致异常情况下资源对象未被释放的隐患。 -
注册对象未反注册
我们常常写很多的Listener,未反注册会导致观察者列表里维持着对象的引用,阻止垃圾回收。 -
Handler临时性内存泄露
Handler通过发送Message与主线程交互,Message发出之后是存储在MessageQueue中的,有些Message也不是马上就被处理的。 - 内部线程泄露new Thread(){}.start();Java中的Thread有一个特点就是她们都是直接被GC Root所引用,也就是说Dalvik虚拟机对所有被激活状态的线程都是持有强引用,导致GC永远都无法回收掉这些线程对象,除非线程被手动停止并置为null或者用户直接kill进程操作。看到这相信你应该也是心中有答案了吧 : 我在每一个MainActivity中都创建了一个线程,此线程会持有MainActivity的引用,即使退出Activity当前线程因为是直接被GC Root引用所以不会被回收掉,导致MainActivity也无法被GC回收。所以当使用线程时,一定要考虑在Activity退出时,及时将线程也停止并释放掉
- Context泄露
- 内部类的创建需要小心,由于内部类会持有外部类对象,不小心就会造成内存泄漏
相关文章
- 关于android源码中的APP编译时引用隐藏的API出现的问题
- Ubuntu 12.04 64bit 配置完android 5.0编译环境后出现“could not write bytes: Broken pipe.”而无法进入输入帐号密码的登陆界面
- 几种典型的Java内存泄漏
- Java内存泄漏发生的情况
- 这咱情况是内存泄漏吗?
- 对JVM中可能出现内存溢出(OOM)情况的整理
- 【转载】关于.NET里的内存泄漏
- android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!
- SSH中JSP页面传值到action出现中文乱码的情况
- Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析