gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:00:04 24 4
gpt4 key购买 nike

正如标题所说,我试图找出 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com