Android面向面试复习----内存泄漏
2018-01-12 21:59
429 查看
内存泄漏
1. java内存泄漏基础知识
1.1 java内存的分配策略
静态存储区(方法区-静态数据、全局变量)栈区(局部变量,方法执行结束后,自动释放)–容量有限
方法中定义的基本变量和对象的引用变量都是在栈区中分配的
堆区(new)–GC回收
new出来的对象,数组
1.2 java是如何管理内存的
通过关键字new申请内存空间
对象的释放:GC
内存由开发人员分配,回收由GC自动完成。
GC回收原理:
GC Root Tracing 算法思路就是通过一系列的名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连,即从GC Roots到这个对象不可达,则证明此对象是不可用的。
1.3 java中的内存泄漏
内存泄漏是指无用对象(不再使用的对象)持续占用内存或者无用对象的内存得不到及时释放,从而造成的内存空间的浪费。2. Android内存泄漏
1. 单例
单例对象使静态的,所以,它的生命周期和app是一样的。如果它所持有的对象在需要被释放时,因为单例持有它的引用导致无法释放,导致内存泄漏。(比如单例构造中传入Activity上下文)2. 内部类
匿名内部类持有了外部类的引用,在外部类需要释放时,由于内部类还存在,导致外部类无法被回收,导致内存泄漏。应该把内部类改为静态内部类,同时,需要用弱引用引用外部类中的对象等,来解决内部类导致的内存泄漏。3. Handler
同上。4. 避免使用static变量
使用懒加载替代static
5. 资源未关闭的内存泄漏
6. AsyncTask
同Handler。区别在于可以调用cancle方法释放。7. bitmap的回收
8. listView的优化
相关文章推荐
- Android面向面试复习----ANR
- Android面向面试复习----OOM异常
- Android面向面试复习----Bitmap
- Android面向面试复习----Activity复习
- Android面向面试复习----冷启动优化
- Android面向面试复习----HandlerThread的妙用
- Android面向面试复习----IntentService详解
- Android面向面试复习---git版本控制
- Android面向面试复习---Android构建流程
- Android面向面试复习----内存管理
- Android面向面试复习----Fragment复习
- Android面向面试复习----Proguard混淆技术详解
- Android面向面试复习----UI卡顿
- Android面向面试复习----Handler详解
- Android面向面试复习----AsyncTask详解
- 面试复习——Android工程师之Java基础
- 面试复习——Android工程师之设计模式
- 在Android编程或者面试中经常会遇到JAVA 面向对象和集合的知识点
- 面试复习——Android工程师之Android面试大纲
- 面试复习——Android工程师之网络基础