DirectSurface UIDirectSurface UI
开始使用
文档/性能与调试

Heap Snapshot 分析

Heap snapshot 用于定位页面关闭后仍被引用的对象。它不是看“内存有没有立刻下降”,而是看对象是否仍有强引用路径。

推荐采样方式

  1. 打开工作台首页,采集 baseline。
  2. 打开目标页面并加载大数据。
  3. 关闭目标页面。
  4. 确认应用或页面 dispose 已执行。
  5. 采集 after-close snapshot。
  6. 对比 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 是当前仍打开页面,可能是正常引用。

修复顺序

  1. 先修全局缓存。
  2. 再修 popup/window 生命周期。
  3. 再修事件订阅和 timer。
  4. 最后看业务模型和闭包。

一次只修一个引用链,修完重新采样,避免误判。

文档建议

每次修复内存泄露,应记录:

  • 复现步骤。
  • snapshot 文件。
  • retainers 关键路径。
  • 修改点。
  • 修复后验证结果。