Javascript 节点为数组中的空值分配了多少内存
跟进此线程: 我是用node.js做的:Javascript 节点为数组中的空值分配了多少内存,javascript,arrays,node.js,memory,null,Javascript,Arrays,Node.js,Memory,Null,跟进此线程: 我是用node.js做的: arr=[] arr[1000]=1 arr[1000000000]=2 arr.sort() 我得到了 FATAL ERROR: JS Allocation failed - process out of memory 这就给我留下了一个问题(我在Yahoogle上找不到它),在节点的数组中,实际为空条目分配了多少内存。我不打算使用100000000个条目,甚至不接近,但也许它仍然不值得分配内存 谁知道如何检查?编辑:对不起,不准确,可能不适用于
arr=[]
arr[1000]=1
arr[1000000000]=2
arr.sort()
我得到了
FATAL ERROR: JS Allocation failed - process out of memory
这就给我留下了一个问题(我在Yahoogle上找不到它),在节点的数组中,实际为空条目分配了多少内存。我不打算使用100000000个条目,甚至不接近,但也许它仍然不值得分配内存
谁知道如何检查?编辑:对不起,不准确,可能不适用于JAVA。
对于在其他应用程序中需要它的人,仍然可能有帮助 引用数组正在分配x 因此,分配arr[100000]将分配100KB x 4b~=0.5Mb(近似值) 当然,如果你不打算使用所有的数组,
你应该考虑一个HASMMAP,它只是一个数据结构而已。 HashMap最好的搜索范围较大,项目数量相对较少
无论哪种方式,都有一些解决方案可以分配一个小阵列,并根据需要扩展它(如果需要) 总之,node.js不会为数组中未定义的值分配内存。我经历的崩溃一定是一个小故障,因为没有其他人可以复制它,安装最新的node.js版本也为我消除了这个问题。不,JavaScript与其他语言不同。数组不是预先分配的。它们本质上是散列映射。我考虑过散列,但我仍然使用整数作为键,并且我需要能够按键对它们进行排序(或者至少保持它们的顺序不变),并按顺序对它们进行迭代。这听起来像是数组而不是散列的工作,不是吗?@EasierSaidThanDone您使用的是哪个版本的Node?这段代码对我来说很好(0.6.12),“但是我仍然使用整数作为键,我需要能够按键对它们进行排序(或者至少保持它们的顺序不变),并按顺序对它们进行迭代。”然后使用索引哈希是正常的。只需将每个键保留在一个大小为[numberofkeys]的数组中。对数组进行排序,或在存储键时对其进行排序。同时构建键/值对的散列。你的程序在Node 0.6.2中运行良好。在我看来,这并不依赖于Node.js,而是完全依赖于运行JavaScript的JavaScript引擎的实现,正如你引用的问题所述。数组包含
未定义的值,不是null
值。另外,需要注意的是,那些未初始化的数组项不是null
——它们是未定义的。这意味着它们不存在。他们真的一点都没有分配。(哈哈,就像@Eric sez。)但是node.js不是带来了它自己的引擎(V8)吗?你的node.js和我的(都是0.6)应该是一样的。我错过了什么?有趣的是,它并没有失败的一些。。。