-1

这个问题很奇怪,也许我只是想完全错误。

我将解释这些课程:

有一个游戏类,它在一个字段中包含一个抽象基类(模式),因此作为该基类子类的所有类都可以在该字段中(所有模式)。现在如下: 有时游戏类会改变模式,因此该字段必须更改为其他类。这行得通,旧类被淘汰,因为没有剩下的引用(垃圾收集器)

但是:在极少数情况下,模式类本身会调用游戏类中的方法来更改其模式 - 但调试器向我显示,该对象仍然必须存在,因为在完成该方法后,它会跳回旧模式对象并完成代码(这在某些时候是可以的,否则它无处可去)。

那么,如何消除旧模式对象以避免内存泄漏?脚本完成后垃圾收集器是否会自动执行此操作(在这种情况下只需调用 return ?)?

4

2 回答 2

1

我认为您误解了垃圾收集。垃圾收集发生在未来的某个时间,而不是立即发生。所以你的模式类仍然存在,可能比你想象的要长,即使在你的游戏类中的引用不再引用它之后。

在未来的某个时候,垃圾收集器将启动,并看到“旧”模式类不再有任何引用并收集它。那可能是 300 毫秒后,5 分钟后,或者当过程结束时。

于 2012-11-14T21:28:05.250 回答
0

不会有内存泄漏。在您的代码完成后,将不再有对该 Mode 实例的引用,因此它最终会被 GC。

所以是的。GC 只会不时检查引用。它不关心这些引用是如何设置的。

于 2012-11-14T21:28:20.273 回答