V8如何处理“大对象空间”中的对象

时间:2017-12-07 16:37:27

标签: javascript garbage-collection javascript-objects v8

我在V8 wiki中读到堆中有大的对象空间,而不是由GC移动。

  

大对象空间:此空间包含的对象大于其他空间的大小限制。每个对象都有自己的mmap'd内存区域。垃圾收集器永远不会移动大对象。

然后V8如何处理这些对象?所以如果我有像这样的对象

function Point() {
  this.a = new Array(99999999).join("aaaaaaaaaa");
  this.b = new Array(99999999).join("aaaaaaaaaa");
  this.c = new Array(99999999).join("aaaaaaaaaa");
}
var a = new Point();

它会被移动到大对象空间并且从未被GC清理过吗?

1 个答案:

答案 0 :(得分:1)

(V8开发人员。)Bergi的评论是正确的。大对象不会移动到大对象空间,它们是大对象空间中创建的。只要他们还活着,他们就不会感动。但它们像任何其他对象一样被垃圾收集:当GC检测到它们不再存在时,内存将被释放。通常,释放死对象不涉及移动它们。