JS引擎何时创建垃圾收集根?

use*_*621 5 javascript v8

一点背景

我正在使用ExtJS3开发一个大型JS应用程序.在运行时,用户可以打开和关闭许多小部件,从而可能增加内存使用量.我使用Chrome的堆分析器修复了许多内存漏洞,但在某些情况下我找不到罪魁祸首.堆分析器显示类似的东西GCRoot[1234]->store.items,我找不到将引用存储的代码部分.

这个问题

什么是V8(或任何其他JS引擎)创建新的垃圾收集器根目录的确切运行时条件?是否存在强制它的某些代码模式(闭包,eval,事件监听......)?

c69*_*c69 5

GC根是垃圾收集器使用的特殊对象组,作为确定哪些对象符合垃圾收集条件的起点."root"只是垃圾收集器假定的对象,默认情况下是可访问的,然后跟踪其引用以查找可访问的所有其他当前对象.任何无法通过任何根对象的任何引用链到达的任何对象都被视为无法访问,并最终将被垃圾收集器销毁.在V8中,根由当前调用堆栈中的对象(即当前执行函数的局部变量和参数),活动V8句柄范围,全局句柄和编译缓存中的对象组成.

通过http://zetafleet.com/blog/google-chromes-heap-profiler-and-memory-timeline

问:GC的根源是什么?

答:很多事情:

  • 内置对象图;
  • 符号表;
  • 堆栈的VM线程;
  • 编译缓存;
  • 处理范围;
  • 全球处理.

通过http://code.google.com/chrome/devtools/docs/heap-profiling.html