如果我有一个大型数组,我会在应用程序的整个生命周期中一直持续使用,例如用户列表。是的,出于多种原因,我喜欢使用数组而不是对象,并且不能使用 splice() 因为我有索引引用。
垃圾收集的通常引用:
Since Javascript is garbage collected, you don't need to delete objects themselves - they will be removed when there is no way to refer to them anymore.
这是否意味着当我删除数组中的元素时,由于可以随时引用该数组 - 垃圾收集器不会释放已删除的元素?或者这是否意味着因为无法引用该对象,它将释放内存? - 即使是这样,我的数组是否会被“未定义”条目填满,这些条目可能会占用至少 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
* - 假设无法从可到达对象或实时局部变量的属性访问数组元素。
<小时/>... - the Garbage collector wont free up the deleted element? or does it mean because the object can't be referred to, it will free up memory?
垃圾收集器从来没有义务释放任何内存,但可以重用先前由已删除数组属性的值使用的任何内存,而该属性未被任何属性或实时局部变量引用。
关于javascript - 已删除数组元素的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23610051/