A
Air官方
内存问题的第一步是知道内存花在哪。showmap(进程内存映射明细)是鸿蒙设备上分析应用内存的基本功。这篇讲用法与读法。
▍拿到 showmap
设备侧命令导出目标进程的内存映射明细:每段虚拟内存区域的大小、权限(读、写、执行)、来源(文件映射还是匿名)、名字(库文件、堆、栈、共享内存)。配合进程总览(物理驻留与虚拟总量的分项汇总)一起看。
▍分块读法
按来源归类,先看大头:一,so 库的文件映射:框架栈与应用库的代码段与只读数据——量级反映你背了多少库(瘦身篇的依据)。二,匿名可写:堆(malloc 的地盘,应用分配行为的镜子)、栈(线程栈,线程数的体现)、大块专用映射(图形缓冲、解码缓存这类有目的的匿名区)。三,共享内存区:跨进程共享(合成器缓冲等)。
▍分析模式
模式一,内存构成画像:总量中库、堆、图形各占多少——画像决定优化方向(库占大头去瘦身、堆占大头查分配、图形占大头查缓冲策略)。模式二,前后对比:操作前后(打开大文件、连续编辑)各取一份,增量在哪——增量异常(只增不减)指向泄漏或缓存无界。模式三,进程对比:同类应用对比画像,判断自己是否离谱。
▍典型的坑信号
可执行匿名区异常大(动态生成代码超预期——JIT 场景查上限);线程栈数量离谱(线程泄漏,每栈几 MB 累积可观);堆持续增长不回落(泄漏方向,配合堆分析工具深入);图形缓冲数量与窗口数不匹配(表面泄漏——表面生命周期篇的隐患)。
▍与其他工具的配合
showmap 定位类别(哪块大),堆分析工具(分配栈统计)定位堆内元凶,采样定位 CPU 侧相关行为。工具链各管一段。
▍验收自测
对你的应用:说出总量前五的内存块各是什么;打开再关闭十个文档,前后对比增量符合预期(该回收的回收)。说不出,今天就采一份看看。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
▍拿到 showmap
设备侧命令导出目标进程的内存映射明细:每段虚拟内存区域的大小、权限(读、写、执行)、来源(文件映射还是匿名)、名字(库文件、堆、栈、共享内存)。配合进程总览(物理驻留与虚拟总量的分项汇总)一起看。
▍分块读法
按来源归类,先看大头:一,so 库的文件映射:框架栈与应用库的代码段与只读数据——量级反映你背了多少库(瘦身篇的依据)。二,匿名可写:堆(malloc 的地盘,应用分配行为的镜子)、栈(线程栈,线程数的体现)、大块专用映射(图形缓冲、解码缓存这类有目的的匿名区)。三,共享内存区:跨进程共享(合成器缓冲等)。
▍分析模式
模式一,内存构成画像:总量中库、堆、图形各占多少——画像决定优化方向(库占大头去瘦身、堆占大头查分配、图形占大头查缓冲策略)。模式二,前后对比:操作前后(打开大文件、连续编辑)各取一份,增量在哪——增量异常(只增不减)指向泄漏或缓存无界。模式三,进程对比:同类应用对比画像,判断自己是否离谱。
▍典型的坑信号
可执行匿名区异常大(动态生成代码超预期——JIT 场景查上限);线程栈数量离谱(线程泄漏,每栈几 MB 累积可观);堆持续增长不回落(泄漏方向,配合堆分析工具深入);图形缓冲数量与窗口数不匹配(表面泄漏——表面生命周期篇的隐患)。
▍与其他工具的配合
showmap 定位类别(哪块大),堆分析工具(分配栈统计)定位堆内元凶,采样定位 CPU 侧相关行为。工具链各管一段。
▍验收自测
对你的应用:说出总量前五的内存块各是什么;打开再关闭十个文档,前后对比增量符合预期(该回收的回收)。说不出,今天就采一份看看。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
楼主
7 天前