怎么构造一个超过Node堆内存大小的对象?
发布于 4 年前 作者 LuckyHH 5955 次浏览 来自 问答

想到了这样一个问题,我要构造一个对象,如果该对象大小超过Nodejs堆内存,那肯定会抛异常退出应用。

let result = {}
for (let i = 0; i < Number.MAX_SAFE_INTEGER; i++) {
  result['_' + i] = '' // some value
}

那怎么才能成功构造一个超过Node堆内存的对象呢? Stream和Buffer不受堆内存限制,但看了半天文档,似乎也解决不了这个问题。。

6 回复

现在应该只能自己在 addon 里 malloc 搞了。

为什么Buffer不可以,是他本身长度限制吗?

如果要构建对象即V8::Object在addon也不行,因为内存管理还是一致的。

注意楼上说的是malloc,这个能开辟空间,自己抛出指针往里面取可以做到内存耗尽。并不是开辟V8对象,V8::Object也只是指向V8堆空间的一个指针,开辟再大都没用。由于很多人可能会误解,所以做下补充。

如果你真的要搞个大对象来做某些特殊场景,直接调大 max_old_space_size 算了

建议用 leveldb 等外部 kv 库实现。

那么怎么样把大象放进冰箱里呢

回到顶部