JavaScript使用删除或依靠垃圾收集?
问题描述:
这里是我的Javascript代码的对象和全局命名空间。JavaScript使用删除或依靠垃圾收集?
Users.Cache.data = { x:'1', y:'2', z:'3'};
,我有2种方式:
1)Users.Cache.data = {};
//垃圾收集需要照顾它从内存中删除。如果有具体的做法是更好的
2)for(i in Users.Cache.data){ delete(Users.Cache.data[i]; }
任何人都可以发表评论:考虑这些作为标准: 一)内存泄漏(看起来既没有内存泄漏的问题) B)性能。
答
其实,使用delete
仍然依赖垃圾收集;它只是为GC做更多工作。
调用delete x.y
不释放任何内存;它只是清除x
对y
的引用。
如果y
没有其他引用,它将变为无根并且可以进行垃圾收集。
您的第二个选项将最终创建更多的无根引用,以供GC通过。
(请注意,我实际上没有测量任何东西)
听起来不像你应该担心的事情。只需执行第一个选项(不需要循环)。垃圾收集器将以任何方式完成工作。 – PeeHaa 2012-03-25 22:49:41
试试这个http://perfectionkills.com/understanding-delete/#theory和这个http://docstore.mik.ua/orelly/webprog/jscript/ch11_03.htm – 2012-03-25 22:52:15