怎么构造一个超过Node堆内存大小的对象?
想到了这样一个问题,我要构造一个对象,如果该对象大小超过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 库实现。
那么怎么样把大象放进冰箱里呢