V8的大型对象空间存放在哪里?

问题描述 投票:0回答:1

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

在我偶然发现的an old commit in V8's repository中,它显示为:

大对象(> Page :: kMaxRegularHeapObjectSize)已分配并 由大对象空间管理。从OS分配了一个大对象 具有额外填充字节的堆(Page :: kPageSize + 页面:: kObjectStartOffset)。大物体总是始于 Page :: kObjectStartOffset设置到页面。大物体在移动过程中不会移动 垃圾收集。

所以我想知道:

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

谢谢!

javascript node.js memory v8
1个回答
1
投票

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

正在从操作系统请求内存。

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

与所有其他空格一样,正在处理”(堆)内存。

我已经在Node JS中做了一些实验

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

© www.soinside.com 2019 - 2024. All rights reserved.