javascript - V8如何处理 "large object space"中的对象

标签 javascript garbage-collection javascript-objects v8

我在 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/

相关文章:

javascript - Typescript 属性装饰器 - 需要帮助以了解以下情况如何发生?

javascript - Dialogflow Fulfillment Webhook 调用失败

javascript - 当 textarea 不为空时,如何在关闭页面之前警告用户?

javascript - jQuery Promise/Deferred 代码比回调更好?如何实现这一目标?

c# - 什么时候服务器GC会被忽略?

C# .NET 对象处置

JavaScript 原型(prototype)设计

Javascript链切换脚本

javascript - jQuery 移动 : Markup Enhancement of dynamically added content

Java垃圾收集日志输出