【发布时间】:2016-06-14 13:36:32
【问题描述】:
function f() {
// some code.. then:
var bloburl = URL.createObjectURL(canvasToBlobOutput)
// I could would do the following line, but assume I don't
// imgElement.src = bloburl;
// will this leak memory?
}
如果我取消注释 imgElement.src 行,我知道 img 元素会“挂钩”内存中的 blob 对象。但是,如果我们按原样运行函数(没有这一行),我看不出bloburl 不能被GCed 的原因?因为我们在函数之后没有引用它。
【问题讨论】:
-
MDN:
URL.createObjectURL()静态方法创建一个 DOMString,其中包含一个 URL,该 URL 表示参数中给定的对象。 URL 生命周期与创建它的窗口中的文档相关联。 浏览器将在卸载文档时自动释放它们;但是,为了获得最佳性能和内存使用,如果您可以在安全时间明确卸载它们,则应该这样做。 -
请阅读,显然,当窗口/文档被卸载时,所有内容都会被释放。我只是不明白为什么即使没有引用该对象也会保留在内存中,据我所知,我的例子会泄漏内存
标签: javascript url garbage-collection window revokeobjecturl