Heap Snapshot 分析
Heap snapshot 用于定位页面关闭后仍被引用的对象。它不是看“内存有没有立刻下降”,而是看对象是否仍有强引用路径。
推荐采样方式
- 打开工作台首页,采集 baseline。
- 打开目标页面并加载大数据。
- 关闭目标页面。
- 确认应用或页面 dispose 已执行。
- 采集 after-close snapshot。
- 对比 retained size 和 retainers。
浏览器不会保证关闭页面后内存立刻归还给系统,因此重点看对象引用链。
搜索对象
优先搜索:
- 页面类名。
- controller 类名。
- 大文档 id。
- 大数组字段名。
- 图片 URL。
- AppContext key。
- Popup 或 Window 标题。
Retainers 判断
常见 retainers:
- 全局 Map。
- 闭包。
- 事件 listener。
- Timer。
- PopupManager。
- Window owned list。
- AppContextRegistry。
- Image.onload / onerror。
如果 retainer 是全局对象,通常就是泄露;如果 retainer 是当前仍打开页面,可能是正常引用。
修复顺序
- 先修全局缓存。
- 再修 popup/window 生命周期。
- 再修事件订阅和 timer。
- 最后看业务模型和闭包。
一次只修一个引用链,修完重新采样,避免误判。
文档建议
每次修复内存泄露,应记录:
- 复现步骤。
- snapshot 文件。
- retainers 关键路径。
- 修改点。
- 修复后验证结果。