首页 > 解决方案 > V8 的大对象空间在哪里?

问题描述

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

在我偶然发现的V8 存储库中的一个旧提交中,它显示:

大对象( > Page::kMaxRegularHeapObjectSize )由大对象空间分配和管理。一个大对象是从 OS 堆中分配的,带有额外的填充字节(Page::kPageSize + Page::kObjectStartOffset)。一个大对象总是从 Page::kObjectStartOffset 开始到一个页面。大对象在垃圾回收期间不会移动。

所以我想知道:

谢谢!

标签: javascriptnode.jsmemoryv8

解决方案


它从操作系统的堆中分配大对象是什么意思?

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

V8 的大对象空间在哪里?

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

我在 Node JS 中做了一些实验

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


推荐阅读