移动App性能测评与优化1.6 本章小结

    xiaoxiao2024-03-30  11

    1.6 本章小结

    在这一章里,我们通过对几个案例的分析,基本了解了Android应用的各种内存组成,以及这些成分是如何被消耗的,也总结出了一些节约和优化内存的经验。在这一小节里我们把经验都列出来供读者参考。

    内存的主要组成索引:

    Native Heap:Native代码分配的内存,虚拟机和Android框架本身也会分配

    Dalvik Heap:Java代码分配的对象

    Dalvik Other:类的数据结构和索引

    so mmap:Native代码和常量

    dex mmap:Java代码和常量

    内存工具:

    Android Studio/Memory Monitor:观察Dalvik内存

    dumpsys meminfo:观察整体内存

    smaps:观察整体内存的详细组成

    Eclipse Memory Analyzer:详细分析Dalvik内存

    测试经验:

    MAT是探索Java堆并发现问题的好帮手,能够迅速发现常见的图片和大数组等问题。

    仅靠MAT提供的功能也不是万能的,比如内存碎片问题就隐藏在对象的地址中。

    要测试非Dalvik部分,有必要了解Linux的进程和内存原理、内存共享机制,熟悉常用命令行工具。

    内存分配的最小单位是页面,通常为4KB,这个限制往往会引发各种碎片问题。

    碎片不仅仅是Dalvik内存,包括各种文件的mmap也有可能产生碎片。

    性能优化:

    尽量不要在循环中创建很多临时变量。

    可以将大型的循环拆散、分段或者按需执行。

    引入SDK库和调用新的系统API时需要考虑成本。有可能一些不常用的功能会导致大量的消耗。这时候有可能需要多进程方案,将这些影响内存的操作放入临时进程执行。

    除了Dalvik堆内存,还有其他类型的内存在了解了原理后也能够进行分析和优化。

    dex文件有很多优化空间。在仔细统计并调整了dex文件的顺序后,往往能够节约1MB以上的mmap内存。

    最新回复(0)