gpt4 book ai didi

node.js - 为什么空对象比非空对象占用更多内存?

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:03 26 4
gpt4 key购买 nike

我发现 V8 对象有相当多的内存开销:我有一个大部分为空对象的数组;每个元素需要 64 字节之多。 (作为比较,Java 需要 16 个字节。)

$ node --expose-gc  -e '
gc();
const start = process.memoryUsage().heapUsed;
var a = Array(50 * 1000);
for (let i = 0; i < a.length; i++) a[i] = {};
gc();
console.log(process.memoryUsage().heapUsed - start)
'
3231304

然后我发现通过向对象添加虚拟属性可以将内存使用量减少 37%。

$ node --expose-gc  -e '
gc();
const start = process.memoryUsage().heapUsed;
var a = Array(50 * 1000);
for (let i = 0; i < a.length; i++) a[i] = {lifeTheUniverseAndEverything:42};
gc();
console.log(process.memoryUsage().heapUsed - start)
'
2028440

为什么向对象添加属性会减少内存使用量?

$ node -v
v12.7.0

$ uname -a
Linux paul 4.15.0-70-generic #79-Ubuntu SMP Tue Nov 12 10:36:11 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

最佳答案

Node (V8) 做出以下假设:如果您的对象为空{},那么它可能会添加属性。因此,它为对象本身的四个属性分配了足够的空间。

另一方面,如果对象字面量已经具有属性,那么它将不会分配任何额外的空间来节省内存。

这就是为什么您会看到空对象占用约 64 个字节。

部分信息是通过阅读 V8 博客文章以及 Matt Zeunert 提供的信息丰富的分割而拼凑而成的:https://www.mattzeunert.com/2017/03/29/v8-object-size.html

关于node.js - 为什么空对象比非空对象占用更多内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59044239/

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