chrome 堆配置文件中的 InternalNode 是什么
What is InternalNode in chrome heap profile
我正在使用 Chrome DevTools 堆快照工具诊断基于 jQuery 的单页应用程序中的内存泄漏,如 https://developer.chrome.com/docs/devtools/memory-problems/#discover_detached_dom_tree_memory_leaks_with_heap_snapshots
中所述
我已经通过这种方式解决了一些问题,但我现在遇到了一个障碍,我无法再确定是什么将对象保存在内存中。例如,对于其中一个对象,它 returns 以下保留器:
据我所知,该对象被保留是因为它在单击事件的闭包范围内使用。
但是点击事件发生在一个分离的 HtmlDivElement 上,它应该被垃圾收集。
它通过 InternalNode 对象以某种方式链接到 window 对象。我在整个互联网上搜索过,但找不到这些 InternalNode 对象是什么。
我的问题是,这些 InternalNode 对象是什么以及我如何“释放”它们以便我的对象被垃圾收集。
TL;DR
泄漏是由 https://crbug.com/1177010
引起的
单击分离元素之外的元素可防止发生内存泄漏。
根据 @wOxxOm 的评论,我编译了一个启用了 enable_additional_blink_object_names
标志的 Chromium 版本,以便它显示 InternalNode
对象的名称。
看来 blink:MouseEventManager
正在阻止分离的 dom 元素被垃圾回收。
这最终将我引向 https://crbug.com/1177010,我可以通过在拍摄另一个堆快照之前单击分离元素外部来确认。
我正在使用 Chrome DevTools 堆快照工具诊断基于 jQuery 的单页应用程序中的内存泄漏,如 https://developer.chrome.com/docs/devtools/memory-problems/#discover_detached_dom_tree_memory_leaks_with_heap_snapshots
中所述我已经通过这种方式解决了一些问题,但我现在遇到了一个障碍,我无法再确定是什么将对象保存在内存中。例如,对于其中一个对象,它 returns 以下保留器:
据我所知,该对象被保留是因为它在单击事件的闭包范围内使用。 但是点击事件发生在一个分离的 HtmlDivElement 上,它应该被垃圾收集。 它通过 InternalNode 对象以某种方式链接到 window 对象。我在整个互联网上搜索过,但找不到这些 InternalNode 对象是什么。
我的问题是,这些 InternalNode 对象是什么以及我如何“释放”它们以便我的对象被垃圾收集。
TL;DR
泄漏是由 https://crbug.com/1177010
引起的
单击分离元素之外的元素可防止发生内存泄漏。
根据 @wOxxOm 的评论,我编译了一个启用了 enable_additional_blink_object_names
标志的 Chromium 版本,以便它显示 InternalNode
对象的名称。
看来 blink:MouseEventManager
正在阻止分离的 dom 元素被垃圾回收。
这最终将我引向 https://crbug.com/1177010,我可以通过在拍摄另一个堆快照之前单击分离元素外部来确认。