【发布时间】:2013-11-15 17:39:53
【问题描述】:
JavaScript 具有堆(垃圾收集)内存和本机(类型化数组、DOM 元素)内存。
问题:两者之间是否存在平衡,如果我想拥有大量类型化数组,它可以工作,但只是减少了堆?
通常的模型是分配内存,使得本地从顶部开始,堆在底部,可以这么说。当需要更多内存时,内存会增加,并且本机和堆再次移动到顶部/底部,中间有额外的内存。或者在两者之间进行权衡的类似方法。
奇怪的问题,我意识到,但我正在编写试图通过类型化数组最小化内存使用的大型程序。
谢谢!
【问题讨论】:
-
为什么你认为类型化数组不是从堆中分配的?所有这些都是特定于特定浏览器的实现。
-
参见goo.gl/IAGpQx:新 JavaScript 对象的内存是从专用 JavaScript 堆(或 VM 堆)分配的。这些对象由 V8 的垃圾收集器管理,因此只要有至少有一个强烈的参考。原生对象是不在 JavaScript 堆中的所有其他东西。与堆对象相比,本机对象在其生命周期内不受 V8 垃圾收集器管理,只能使用其 JavaScript 包装器对象从 JavaScript 访问。
-
.. 顺便说一句:我同意实施,我应该在我的原始帖子中说 chrome 是我的兴趣。但尽管如此,我已经看到其他关于本机和堆内存之间差异的参考,所以我认为这适用于其他浏览器。
-
为什么你认为一个类型化数组是一个“原生对象”而不是从堆中分配而不是垃圾收集? DOM 元素由浏览器管理,而不是由 JS 管理,因此它们是不同的野兽,但它们也被垃圾收集(由浏览器)。我问你这些问题是因为我认为你在做一些错误的假设。
标签: javascript memory memory-management