【发布时间】:2013-01-08 01:46:44
【问题描述】:
更新:看起来这不是内存泄漏,有人会根据此示例的扩展创建吗?
原始问题:
假设我创建并启动了一个不会终止的线程,只要它还活着,线程就会创建一个对象和引用。请参阅以下代码。 JVM 垃圾会收集x 吗?
这会被认为是内存泄漏吗?
public class MyRunnable implements Runnable{
public void run(){
X x = new X();
while(true){}
}
}
Thread t = new Thread(new MyRunnable());
t.start();
【问题讨论】:
-
对象
x还活着,GC 不应该销毁它。 -
这并不是真正的内存泄漏,您已经为线程分配了一个变量并让线程继续运行,虽然它可能毫无意义,因为它什么都不做,但它按设计运行。
-
我会说不。因为无论逻辑如何,对象仍在范围内,因此不符合收集条件。泄漏是当对象不再可访问但内存被保留时。在您的情况下,您可以在 while 之后使用可以使用 x 的代码。实际上在你的情况下 x 只是一个未使用的变量。
-
不是内存泄漏,只是语言的误用。
-
我在eclipse中试过这段代码...如何杀死这个线程?
标签: java garbage-collection jvm