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 用完释放。
jsconst timer = setInterval(sync, 5000); window.addEventListener('resize', onResize); return () => { clearInterval(timer); window.removeEventListener('resize', onResize); };