use*_*950 9 javascript garbage-collection
我对此感到困惑,因为我看过几个不同的评论.我正在阅读一本javascript书,其中提到将全局变量设置为null是一种很好的做法(假设没有其他引用)并且GC在下一次扫描时回收此变量的内存.我已经看到其他评论说全局变量从未被GC处理过.
此外,当在OOP结构中编写javascript时,如果我有类似这样的东西(游戏在全局上下文中)会发生什么:
var game = {};
game.level = 0;
game.hero = new hero();
//do stuff
game.hero = null;
Run Code Online (Sandbox Code Playgroud)
由于英雄生活在一个存储在游戏中的对象中,这个对象位于全局上下文中,如果我将例如英雄设置为null,那么这会被GC处理吗?
izb*_*izb 15
在全局变量仍然存在的意义上,全局变量永远不会被GC处理掉.但是,null
将其设置为将允许收集它引用的内存.
例如
之前:
global -> {nothingness}
Run Code Online (Sandbox Code Playgroud)
后:
global -> var a -> object { foo: "bar" }
Run Code Online (Sandbox Code Playgroud)
设置a
为null
:
global -> var a -> null
Run Code Online (Sandbox Code Playgroud)
这里,对象使用的内存将有资格进行收集.该变量a
仍然存在,它只是引用null
.
从未收集全局变量的说法略有误导.可以更准确地说,任何可追溯到全局上下文的内存目前都不符合收集条件.
在回答你的问题时,是的 - 英雄对象将有资格收集,因为它与全球背景的间接联系已被切断.
归档时间: |
|
查看次数: |
2733 次 |
最近记录: |