Javascript 数组的内存分配
Memory allocation of a Javascript array?
如果我向 Javascript 数组的第 1000 个元素添加一个值,那么假设这些位置是打开的,将该值添加到第 0 个元素有什么区别吗?
我说的是内存消耗。
例:
arr[1000] = 'asdf';
对
arr[0] = 'asdf';
由于 JavaScript 数组实际上是对象,内存不是连续的。因此,通过您的示例,访问array[1000]
而不在其他地方存储任何内容将占用与您存储的任何内容相同的内存量(不是 1000 * 值大小)。
事实上,按照 Danny 的答案执行var arr = new Array(1000);
操作不会创建一个包含 1000 个空插槽的数组。它创建一个具有值 1000
的 length
属性的数组。
这样想:如果 JavaScript 不知道它存储的内容的类型和大小,它怎么知道要留出多少内存?
例如:
var arr = [];
arr[1000] = 'String value';
什么说我不能过来在另一个索引中存储整数?
arr[0] = 2;
源:https://stackoverflow.com/a/20323491/2506594
如果你有一个大小为 1000 的数组,则占用了 1000 个内存插槽。
var arr = new Array(1000);
数组查找的时间复杂度仍然是恒定的,因此这不会减慢应用程序的速度。
但是,您明确要求内存中有 1000 个插槽,因此它仍然是一个相当大的空间。虽然内存作为硬件很便宜,但您仍应尽可能保持数组大小的动态,以防止程序占用内存中不必要的空间。
JavaScript 对象本身并没有真正的排序。无论是数组还是对象,键的顺序都不重要;实现可以按所需的任何顺序放置它们。当然,您必须按某种顺序存储它们,因此大多数实现都按照您插入它们的顺序保存它们。但这只是一个巧合:规范没有强制要求它,所以你不能指望它总是正确的。
正因为如此, arr[1000]
不一定是数组的第 1000 个元素:它只是一个具有恰好1000
键的成员。如果您在其前面插入了 999 个元素,并且运行时将它们保持在广告顺序中,则它可能确实是第 1000 个元素。但它也可以很容易地成为第42个元素。它甚至可能是第一个元素,具体取决于运行时的实现和您自己的代码。
由于数组没有排序,假设还没有设置其他任何内存,分配给 arr[1000] 不会比分配给 arr[0] 占用更多的内存。如果你已经设置了 999 个元素,那么显然设置 arr[1000] 会导致数组占用比以前更多的空间,因为你必须将该元素存储在某个地方。但它不会仅仅因为它的密钥是 1000 而占用任何额外的空间。
- Javascript内存分配
- Javascript是否为具有未定义值的变量分配32位内存
- 使用模块模式时分配了多少内存
- JavaScript 中的堆和本机内存分配:如何管理
- 分配更多内存 Cucumber-js
- 节点为数组中的空值分配多少内存
- 事件处理程序分配和内存泄漏
- JSON 树和内存分配
- JavaScript 类型的内存分配
- 为阵列分配内存
- 是否可以加载图像,在内存中缩放它并将其分配为背景图像的 uri
- Javascript 类、编译器性能和新 Klass() 上的内存分配
- 画布路径内存分配
- 内存分配和DOM元素
- Chrome在使用单页应用程序时增加系统内存分配
- 致命错误:CALL_AND_RETRY_2分配失败-进程在预处理我的js字段时内存不足
- 删除缓存文件并以编程方式释放为其分配的内存
- 如何检测在JavaScript中触发垃圾收集的内存分配
- 是否可以在不分配内存的情况下存储值
- 如何在for(prop in obj)循环中分配内存,最好的方法是什么