【js】JavaScript手动回收垃圾

如何手动触发 JavaScript 垃圾回收行为?

转载自:https://github.com/cssmagic/better-dollar/issues/3

垃圾回收,即 garbage collect,简称 “GC”。

这里的 “手动” 指有效地、显式地、可控地触发浏览器 JavaScript 引擎的垃圾回收行为,比如通过点击页面中的按钮来调用 JS 方法,或使用浏览器提供的功能。

IE

IE 实际上提供了一个未公开的 JS 方法 CollectGarbage()。至少在 IE8 仍然存在此方法。

if (typeof window.CollectGarbage === 'function') {
    CollectGarbage()
}

Opera

旧版(非 Blink 内核)的 Opera 7+ 似乎也有一个手动触发 GC 的 JS 方法。

window.opera.collect()

Firefox

有文章 提到了两种方法:

Components.utils.forceGC()
window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
    .getInterface(Components.interfaces.nsIDOMWindowUtils)
    .garbageCollect()

区别在于前者只触发 JS 引擎内的垃圾回收,而后者还可以处理 XPCOM 对象的回收。对分析网页内的垃圾回收行为来说,前者足够了。

在最新的 Firefox 中,上述方法可能已失效(无法在控制台直接调用),也可能这些方法只能在 Firefox 扩展中使用。我稍后会找低版本的 Firefox 做更多测试。

更新:在 Firefox 3.6 中也无法直接使用上述方法。

更新:有一个扩展 MemChaser 似乎允许手动触发 GC。

更新:Firefox 在 about:memory 页面中原生提供了详细的内存监控功能,但结合上述扩展使用似乎更方便一些。

Chrome

Chrome 的 DevTools 对 JavaScript 的垃圾回收和内存泄漏提供了强大的分析工具。在 DevTools 的 “Timeline” 页面可以手动点击 “CollectGarbage” 按钮来触发 GC。

详情可参见这篇文章:《搞定JavaScript内存泄漏》。

你可能感兴趣的:(【js】JavaScript手动回收垃圾)