我在 V8 wiki 中读到,堆中有很大的对象空间,没有被 GC 移动。
Large-object-space: This space contains objects which are larger than the size limits of other spaces. Each object gets its own mmap'd region of memory. Large objects are never moved by the garbage collector.
那么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清理?
最佳答案
(这里是 V8 开发人员。)Bergi 的评论是正确的。大对象不会移动到大对象空间,而是在大对象空间中创建。只要他们还活着,他们就不会被感动。但它们像任何其他对象一样被垃圾收集:当 GC 检测到它们不再存在时,内存将被释放。一般来说,释放死亡对象并不涉及移动它们。
关于javascript - V8如何处理 "large object space"中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699679/