2

这里是我的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)性能。

+0

听起来不像你应该担心的事情。只需执行第一个选项(不需要循环)。垃圾收集器将以任何方式完成工作。 – PeeHaa 2012-03-25 22:49:41

+0

试试这个http://perfectionkills.com/understanding-delete/#theory和这个http://docstore.mik.ua/orelly/webprog/jscript/ch11_03.htm – 2012-03-25 22:52:15

回答

4

其实,使用delete仍然依赖垃圾收集;它只是为GC做更多工作。

调用delete x.y不释放任何内存;它只是清除xy的引用。
如果y没有其他引用,它将变为无根并且可以进行垃圾收集。

您的第二个选项将最终创建更多的无根引用,以供GC通过。
(请注意,我实际上没有测量任何东西)

+1

很好的答案,这里有一些更详细的http:///docstore.mik.ua/orelly/webprog/jscript/ch11_03.htm – 2012-03-25 22:53:08

+0

忽略第11.3.2节。 – SLaks 2012-03-25 22:55:36

+0

感谢您的回复。 – sbr 2012-03-25 23:01:09