无论如何,如果我写这样的东西:
var h = 5;
delete h;
...我会消除引用,但不会消除内存。
现在,如果我将变量设置为 null,是否会用 null 对象替换内存?
var h = 5;
h = null;
如果是这样,那么不仅delete()
引用,而且用null
对象替换内存,以获得更好的内存优化不是更好吗?
var h = 5;
h = null;
delete h;
如果我想在一个又长又复杂的脚本中创建动态对象的桶负载,那么摆脱或以其他方式诱导垃圾收集器消除对象的最佳方法是什么?因为除了消除引用之外,我还读到,如果内存被 null 占用,您可以提示收集器释放内存...
最佳答案
没有销毁
。您可能正在考虑delete
,但是delete
不能用于删除变量,只能用于删除属性。 (尽管目前的浏览器允许您摆脱它,但结果各不相同。)您可以通过从 window
中删除全局变量来删除它们,但不能删除本地变量。
无论如何,你不需要在 JavaScript 中考虑这类事情。将变量设置为 null,如果没有更多变量指向同一对象,它将在不久的将来的某个时刻被垃圾收集。指向 null 的变量的记录占用的空间很小,不值得担心。除非您有意关闭,否则当本地函数退出时,它就会超出范围,从而有资格进行 GC。
I had read that you could hint the collector to free memory if it was occupied by null...
不。您只需删除引用,GC 将拾取现在孤立的对象并自行释放内存。你在这件事上没有任何发言权。
关于javascript - 关于垃圾回收的 Null 和 delete(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4101472/