【发布时间】:2020-04-23 00:58:16
【问题描述】:
正如标题所说,我试图找出 V8 的大对象空间位于何处。我在 Node JS 中做了一些实验,我将相当大的对象(+50mb)加载到内存中。据我了解,这些对象应该直接存储到大对象空间中。但是,process.memoryUsage() 没有显示出任何存储这些对象的迹象。但是对象肯定在某个地方……那么,如果不在进程堆中,那么大对象空间在哪里?
在an old commit in V8's repository我偶然发现,上面写着:
大对象( > Page::kMaxRegularHeapObjectSize )被分配并 由大对象空间管理。从 OS 分配大对象 具有额外填充字节的堆(Page::kPageSize + 页::kObjectStartOffset)。大对象总是从 Page::kObjectStartOffset 到一个页面。大物体在过程中不动 垃圾回收。
所以我想知道:
- 从操作系统的堆中分配大对象是什么意思?据我所知,堆与任务绑定,我不明白 V8 如何将内存存储到一个不属于它自己的堆中,更多的是在操作系统的堆上。我这里一定是错的,所以请纠正我!
- 这是我的 Node JS 进程显示正常内存消耗的原因吗?
谢谢!
【问题讨论】:
-
这里是关于 node.js 中不同类型存储的有用概述:deepu.tech/memory-management-in-v8 和实际来源中的描述:chromium.googlesource.com/v8/v8.git/+/5.1.281.35/src/heap/…。
标签: javascript node.js memory v8