5月30日 19:58

Chrome 如何管理内存?V8 垃圾回收和泄漏排查怎么做?

Chrome 的内存管理主要由多进程架构、Blink 渲染管线和 V8 垃圾回收一起完成。每个标签页、iframe、扩展或站点隔离进程都可能占用独立内存;JS 对象由 V8 管,DOM、样式、图片、GPU 资源则不完全在 JS 堆里。所以排查内存问题不能只看一个数字,要分清是 JS 堆增长、DOM 节点泄漏,还是图片、Canvas、WebGL 资源没有释放。

追问

V8 垃圾回收大概怎么工作?

V8 会把对象分成新生代和老生代,短命对象优先在新生代快速回收,存活久的对象会晋升到老生代。

最常见的内存泄漏有哪些?

定时器没清、事件监听没移除、全局数组当缓存、闭包引用大对象、已删除 DOM 还被 JS 变量保存,都是高频原因。

Chrome DevTools 怎么排查?

先用 Performance 或 Task Manager 观察内存是否持续上升,再到 Memory 面板拍 Heap Snapshot,对比 Retained Size 和 Detached DOM tree。

WeakMap 能解决所有泄漏吗?

不能。它适合存跟对象生命周期绑定的附加信息,但如果外部还有全局引用,WeakMap 也救不了。

代码里应该怎么清理?

组件卸载时清理事件、定时器和订阅,长列表做虚拟滚动,大图和 Blob URL 用完释放。

js
const timer = setInterval(sync, 5000); window.addEventListener('resize', onResize); return () => { clearInterval(timer); window.removeEventListener('resize', onResize); };
标签:Chrome