java内存泄漏基础知识
该被释放的时候没被释放,一直被某个对象所持有,导致不能gc。
1、java内存的分配策略
1)静态存储区
方法区,主要存放静态数据,全局变量。程序编译的时候已经分配好,并且在整个程序运行期间都存在。
2)栈区
方法体内的局部变量会在栈上创建内存空间,并在方法执行结束后自动释放。效率高,但是容量有限
3)堆区
通常是new对象创建出来的内存,通常在不使用的时候由java垃圾回收器进行回收。
2、java如何管理内存
通过new为每个对象申请内存空间。
3、java内存泄漏
内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费成为内存泄漏。
Android内存泄漏:
1.单例生命周期与应用生命周期相同。
2.匿名内部类 非静态内部类会持有外部类的引用,所以通常用静态内部类
3.Handler 静态+弱引用 + 回收(因为handler是非静态内部类)
4.尽量避免使用static变量
5.资源为关闭造成的内存泄漏
6.AsyncTask造成的内存泄漏
网友评论