我是靠谱客的博主 如意百合,最近开发中收集的这篇文章主要介绍课程总结4-内存优化1,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 前言

         Android 内存优化杂谈

  • 内存设备发展

         Facebook有一个叫 device-year-class的开源库 ,它会用年份来区分设备的性能

  • 手机内存
    • 名词解释:
      • DDR (Double Data Rate)双倍速率
      • LPDDR RAM(Lower Power Double Data Rate RAM)低功耗双倍数据速率内存
    • 宽带 = 时钟速率 x 内存总线位数 ÷ 8 = 12.8GB/s,因为双倍速率故最终为12.8GB/s x 2 = 25.6 GB/s

类型

时钟频率

宽带

工作电压

LPDDR3

800MHZ

12.8GB/s

1.2V

LPDDR4

1600MHZ

25.6GB/s

1.1V

LPDDR4X

1600MHZ

25.6GB/s

0.6V

 

  • 内存引发的问题
    • 异常
    • 卡顿
      • 通过发送SIGQUIT信号获得ANR日志

                      adb shell kill -S QUIT PID

                      adb pull /data/anr/traces.txt

 

          包含信息

          sticky concurrent mark sweep paused: Sum: 5.491ms 99% C.I. 1.464ms-2.133ms Avg:

         1.830ms Max: 2.133ms // GC 暂停时间

          Total time spent in GC: 502.251ms // GC 总耗时

          Mean GC size throughput: 92MB/s // GC 吞吐量

          Mean GC object throughput: 1.54702e+06 objects/s

 

  • Android Bitmap内存分配的变化
    • Android 3.0之前Bitmap对象放在Java堆,而像素数据是放在Native内存中,需要手动调用recycle
    • Android 3.0 ~ Android 7.0 将Bitmap对象和像素数据都放在Java堆中,会随对象一起被回收
    • Android 8.0将像素数据放到Native内存中,使用Hardware Bitmap 减少图片内存并提升绘制

 

        Fresco 图片库就是在Dalvik会把图片放到Native内存中

 

  • 测量内存方法
    • 参考Android Developer中《调查RAM使用情况》
      • adb shell dumpsys meminfo <package_name|pid> [-d]
    • Java 内存分配
      • 分析工具 Allocation Tracker 和 MAT
      • Allocation Tracker缺点 -- 《Android 内存申请分析》
      • Dalvik 和 ART中,Allocation Tracker 的开启方式

           // dalvik

          bool dvmEnableAllocTracker()

          // art

         void setAllocTrackingEnabled()

 

  • Native内存分配 --- 《调试本地内存使用》
    • Malloc调试
      • Android8.0之后支持在非root的设备做Nativie内存调试,但是需要wrap.sh做包装
        • adb shell setprop wrap.<APP> '"LIBC_DEBUG_MALLOC_OPTIONS=backtrace logwrapper"'
    • Google弃Valgrind建议使用AddressSanitize,在Android8.0上可根据指南来使用

 

  • Malloc钩子
    • 在Android P之后,Android 的 libc支持拦截在程序执行期间发生的所有分配/释放调用,这样就可以构建出自定义的内存检测工具

               adb shell setprop wrap.<APP> '"LIBC_HOOKS_ENABLE=1"'

最后

以上就是如意百合为你收集整理的课程总结4-内存优化1的全部内容,希望文章能够帮你解决课程总结4-内存优化1所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部