正如标题所述,我正在尝试找出V8的大型对象空间位于何处。我在Node JS中做了一些实验,在其中我将相当大的对象(+ 50mb)加载到内存中。据我了解,这些对象应直接存储在较大的对象空间中。但是,process.memoryUsage()
没有显示任何存储这些对象的迹象。但是对象必须在某处...那么,如果不在进程堆中,那么大的对象空间在哪里?
在我偶然发现的an old commit in V8's repository中,它显示为:
大对象(> Page :: kMaxRegularHeapObjectSize)已分配并 由大对象空间管理。从OS分配了一个大对象 具有额外填充字节的堆(Page :: kPageSize + 页面:: kObjectStartOffset)。大物体总是始于 Page :: kObjectStartOffset设置到页面。大物体在移动过程中不会移动 垃圾收集。
所以我想知道:
谢谢!
这是什么意思是它从操作系统的堆中分配大对象?
正在从操作系统请求内存。
V8的大型对象空间驻留在哪里?
与所有其他空格一样,正在处理”(堆)内存。
我已经在Node JS中做了一些实验
如果您提供更多详细信息,我可以更好地猜测可能发生了什么。也许您正在使用TypedArrays?这些是经过特殊处理的,其后备存储(超过一定大小)不会存储在托管堆上。