关于垃圾收集的Null和delete()

时间:2010-11-04 21:14:20

标签: javascript ajax null garbage-collection

无论如何,如果我写的是:

var h = 5;  
delete h; 

......我会删除引用,但不是内存 现在,如果我将变量设置为null,是否会用空对象替换内存?

var h = 5;  
h = null;

如果是这样,不仅仅delete()引用,而且还用null对象替换内存不是更好,以获得更好的内存优化?

var h = 5;  
h = null;  
delete h; 

如果我想在一个冗长而复杂的脚本中创建一个桶加载的动态对象,那么摆脱或以其他方式诱导垃圾收集器消除对象的最佳方法是什么?因为除了只是删除引用之外,我还读到如果它被null占用,你可以提示收集器释放内存......

2 个答案:

答案 0 :(得分:5)

没有destroy。您可能正在考虑delete,但delete不能用于删除变量,只能用于删除属性。 (虽然目前使用浏览器可以让你获得不同的结果。)你可以通过从window删除全局变量来删除全局变量,但不能删除本地变量。

无论如何,你不需要在JavaScript中考虑这种东西。将变量设置为null,如果没有更多变量指向同一个对象,它将在不久的将来的某个时刻被垃圾收集。指向null的变量记录占用的空间量很小,不值得担心。除非你正在进行故意关闭,否则当本地函数退出时,它将超出范围,成为GC的资格。

  

我曾经读过,如果它被null占用,你可以提示收集器释放内存......

不。你只是删除引用,GC将获取现在的孤立对象并自行释放内存。你在这件事上没有任何发言权。

答案 1 :(得分:4)

简单地删除对buckload的所有引用,让垃圾收集变得神奇。