Javascript 已删除数组元素的垃圾回收

Javascript 已删除数组元素的垃圾回收,javascript,arrays,garbage-collection,Javascript,Arrays,Garbage Collection,如果我有一个大的数组,我会在应用的整个生命周期中一直持续使用,比如用户列表。是的,出于许多原因,我喜欢使用数组而不是对象,并且不能使用splice(),因为我有索引引用 垃圾收集的常用报价: 因为Javascript是垃圾收集的,所以不需要删除 对象本身-当无法删除时,它们将被删除 再提到他们 这是否意味着当我删除数组中的一个元素时,由于可以随时引用该数组,垃圾收集器不会释放已删除的元素?或者这是否意味着因为对象无法被引用,它将释放内存即使是这样,我的数组是否会被“未定义”的条目填满,这些条目可

如果我有一个大的数组,我会在应用的整个生命周期中一直持续使用,比如用户列表。是的,出于许多原因,我喜欢使用数组而不是对象,并且不能使用splice(),因为我有索引引用

垃圾收集的常用报价:

因为Javascript是垃圾收集的,所以不需要删除 对象本身-当无法删除时,它们将被删除 再提到他们

这是否意味着当我删除数组中的一个元素时,由于可以随时引用该数组,垃圾收集器不会释放已删除的元素?或者这是否意味着因为对象无法被引用,它将释放内存即使是这样,我的数组是否会被“未定义”的条目填满,这些条目可能会占用至少1或2个字节的内存有人知道每个未定义的条目使用了多少内存吗

例如:

var userList = [];
var userNumber = 0;

userList[userNumber++] = {name:'john',score:200,friends:['abby','micky']};
userList[userNumber++] = {name:'jack',score:200,friends:['betty','billy']};
userList[userNumber++] = {name:'jimm',score:200,friends:['catty','ken']};

delete userList[1];
// will {name:'jack',score:200,friends[ n ]} size of memory be freed 
// or a little less to internally reference 'undefined'?

删除数组属性时,其值将变得不可访问*,因此,只要
删除它们,垃圾收集器就可以释放它们

a = [0, 1, 2]
alert(1 in a);  // true
delete a[1];
alert(1 in a);  // false
*-假设数组元素无法从可访问对象或活动局部变量的属性访问


…-垃圾收集器不会释放已删除的元素吗?或者这意味着因为对象不能被引用,它将释放内存


垃圾收集器从来没有义务释放任何内存,但可以重用已删除数组属性的值以前使用的任何内存,该属性或活动局部变量未引用该内存。

一旦调用
delete userList[1],释放的元素空间将可回收
如果您没有保留对该项目的其他引用。数组本身占用的空间很大程度上取决于实现和使用数组的方式。除非有数十亿用户,否则每个
未定义的
条目占用1或2个字节的空间不会很大。在使用这种(庞大的)数组方式变得重要之前,您将遇到一些问题。这个问题充满了小问题。