【发布时间】:2012-04-30 08:01:59
【问题描述】:
考虑以下类:
class Foo implements Runnable {
public Foo () {
Thread th = new Thread (this);
th.start();
}
public run() {
... // long task
}
}
如果我们创建多个Foo 的实例
new Foo();
new Foo();
new Foo();
new Foo();
(请注意,我们不保留指向它们的指针)。
垃圾收集器之前是否可以删除这些实例
run()中的线程结束了吗? (换句话说:有没有参考 到Foo对象?)另一方面,这些实例是否会被 GC 删除 在 `run()' 中的线程结束之后,还是我们在浪费内存(“内存泄漏”)?
如果 1. 或 2. 有问题,那么正确的方法是什么?
谢谢
【问题讨论】:
-
你实际上可以很容易地测试这个。
-
@Quaternion,是的,也许,但是另一个问题的措辞真的很“模糊”并且难以理解,恕我直言。
-
这不是重复的。链接的问题没有解决“完成后是否会被垃圾收集”的问题(我正要专门问这个)。它只询问/回答“运行时不会被 GC”的方面。我认为这里的这个问题更好。
-
当您将内容监管游戏化时会发生这种情况。显然不是重复的东西会被标记为重复。
标签: java multithreading garbage-collection