javascript - V8 的大对象空间驻留在哪里?

标签 javascript node.js memory v8

正如标题所说,我试图找出 V8 的大对象空间驻留在哪里。我在 Node JS 中做了一些实验,将相当大的对象(+50mb)加载到内存中。据我了解,这些对象应该直接存储到大对象空间中。但是,process.memoryUsage() 没有显示任何存储这些对象的迹象。但对象必须在某个地方......那么,如果不在进程的堆中,大对象空间在哪里?

an old commit in V8's repository我偶然发现,上面写着:

Large objects ( > Page::kMaxRegularHeapObjectSize ) are allocated and managed by the large object space. A large object is allocated from OS heap with extra padding bytes (Page::kPageSize + Page::kObjectStartOffset). A large object always starts at Page::kObjectStartOffset to a page. Large objects do not move during garbage collections.

所以我想知道:

  • 从操作系统堆中分配大对象是什么意思?据我所知,堆与任务绑定(bind)在一起,我不明白V8如何将内存存储到不属于它自己的堆中,更多的是操作系统的堆上。我一定是错了,所以请纠正我!
  • 这就是我的 Node JS 进程显示正常内存消耗的原因吗?

谢谢!

最佳答案

What does it mean it's allocating large objects from the operative system's heap?

它正在向操作系统请求内存。

Where does V8's large object space reside?

在进程(堆)内存中,就像所有其他空间一样。

I've done some experiments in Node JS

如果您提供更多详细信息,我可以更好地猜测可能发生的情况。也许您正在使用 TypedArrays?这些是经过特殊处理的,它们的后备存储(超过一定大小)不存储在托管堆上。

关于javascript - V8 的大对象空间驻留在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61377583/

相关文章:

javascript - 尝试直接从 javascript 控制 Paper.js 时出现奇怪的行为

javascript - meteor.js 和 mongoDB - 多字段查询

java - 尝试了解此堆分析以确定内存泄漏或仅需要大量内存

c - 可以使用 strcpy() 将 malloc 数组复制到 C 中的堆栈数组吗?

Javascript 字符串到特殊数组

javascript - 检查字符串是否只包含数字,否则显示消息

javascript - 当条件为真时如何在头部包含脚本文件?

node.js - NodeJS Passport 本地策略通知客户端用户已通过身份验证

javascript - Pug 访问对象数组

c++ - std::sort 算法内存使用情况