什么是内存泄漏
内存不在GC掌控之内了
总结:GC回收机制,某对象不再持有任何的引用的时候才会回收。
提问:如果没对象被别的对象引用了,就不能被GC回收
答案:否,软引用,虚引用,弱引用。----》用来避免内存过度消耗以及容易内存泄漏的。
回答,该对象一直往上追溯引用,能追溯到GC Root引用点才能说不能被GC回收。
可以作为GC Root引用点的:
JavaStack中引用的对象;
方法区中的静态引用指向的对象;
方法区常量引用指向的对象;
Native方法中JNI引用的对象;
Tread--活着的线程。
怎样判断一个对象是垃圾对象?
1、GC管的着的。
2、主观的--不需要再被使用的对象,但是GC没办法回收的
2、确定是否存在内存泄漏
判断一个应用里面内存泄漏是否避免的比较好,怎么看?
adb shell dumpsys meminfo yourpackagename -d
3、确定泄漏的大致范围
4、更细致地查找内存泄漏
mat
hprof-conv -z memory-20190512T150854.hprof /Users/bishiduo/Downloads/PrjSrc/Android/yunda/V5.9.9_agreement_client/memory-1-1.hprof
5、分析内存泄漏的情况--原因--解决掉
一、内部线程造成的内存泄漏
解决方案:将非静态匿名内部类修改为静态匿名内部类
二、Handler引起的内存泄漏
第一步将Handler改成静态内部类
第二部,将需要引用Activity的地方,改成弱引用
三、资源未关闭引起的内存泄漏
四、不要用的监听未移除
网友评论