Javascript 我能拿到GC';开发工具中的d内存?

Javascript 我能拿到GC';开发工具中的d内存?,javascript,memory-leaks,garbage-collection,google-chrome-devtools,Javascript,Memory Leaks,Garbage Collection,Google Chrome Devtools,我有一个我正在调试的大型应用程序。我注意到一个锯齿状的记忆模式,表明有频繁的GC发生 为了调试这一点,我试图找到正在被GC’d的内存的内容。这在chrome和开发工具中是可能的吗?我知道我可以拍摄堆快照,但如何保证在GC之前和之后立即发生这种情况?我知道我可以从代码中触发堆快照,但同样的问题。在DevTools中还没有关于垃圾收集的详细信息。不过我有一段时间了。你可以用“星号”来表示你也想要它 至于快照,您将无法将其用于您的目的。在创建每个快照之前,将收集所有垃圾 快照中是否包含“死”(无法访

我有一个我正在调试的大型应用程序。我注意到一个锯齿状的记忆模式,表明有频繁的GC发生


为了调试这一点,我试图找到正在被GC’d的内存的内容。这在chrome和开发工具中是可能的吗?我知道我可以拍摄堆快照,但如何保证在GC之前和之后立即发生这种情况?我知道我可以从代码中触发堆快照,但同样的问题。

在DevTools中还没有关于垃圾收集的详细信息。不过我有一段时间了。你可以用“星号”来表示你也想要它


至于快照,您将无法将其用于您的目的。在创建每个快照之前,将收集所有垃圾

快照中是否包含“死”(无法访问)对象

否。快照中仅包括可访问的对象。另外,拍摄快照总是从执行GC开始


最好的方法是记录堆分配(“概要文件”>“记录堆分配”),并使用内存快照了解应用程序正在创建哪些对象。有了这些知识,您可以尝试识别短期存在的对象(导致锯齿模式)


顺便说一句,如果您使用的是
requestAnimationFrame
,您应该知道它本身。

使用记录堆分配配置文件类型,您可以获得有关已分配对象的信息

您需要在DevTools设置中启用“记录堆分配堆栈跟踪”选项。 见截图

之后,您需要记录“记录堆分配”快照类型。 记录过程可能会显著降低页面速度,因为每次页面分配对象时,DevTools都会扫描js堆栈。因此,您将获得包含有关分配信息的快照。在许多情况下,DevTools可以检测对象的类名。见截图

在快照中,您需要选择分配视图

我认为网格中的信息可以帮助您解决问题。 在屏幕截图中,您可以看到一个类有41k个分配,但只有12k个仍然存在。因此,29k个对象是垃圾。即使看不到对象的名称,也可以跳转到分配对象的源中