美文网首页
撬动高薪的性能优化技能-手动内存优化

撬动高薪的性能优化技能-手动内存优化

作者: Ahwind | 来源:发表于2019-05-12 17:47 被阅读0次

    什么是内存泄漏
    内存不在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的地方,改成弱引用
    三、资源未关闭引起的内存泄漏
    四、不要用的监听未移除

    相关文章

      网友评论

          本文标题:撬动高薪的性能优化技能-手动内存优化

          本文链接:https://www.haomeiwen.com/subject/umdcaqtx.html