7

更新:看起来这不是内存泄漏,有人会根据这个例子的扩展创建吗?
原始问题:假设我创建并启动了一个不会终止的线程,只要它还活着,线程就会创建一个对象和引用。请参阅以下代码。JVM 垃圾会收集x吗?这会被认为是内存泄漏吗?

public class MyRunnable implements Runnable{

    public void run(){
      X x = new X();
      while(true){}
   }
}

Thread t = new Thread(new MyRunnable());
t.start();
4

4 回答 4

5

线程永远不会终止,因此垃圾收集器永远不会释放x。但是,如果您从未真正使用过x它,它可能会被优化掉。如果你使用 x 这不可能是内存泄漏 - 你使用内存。

于 2013-01-24T10:29:55.157 回答
0

x具有方法范围,并且在方法返回或您明确执行之前不会x = null被垃圾收集。不,这不会被视为泄漏。

于 2013-01-24T10:31:30.863 回答
0

jvm垃圾会收集x吗?

不,因为线程仍然保持对它的引用。

这会被认为是内存泄漏吗?

不是真正的泄漏,而是浪费内存。

于 2013-01-24T10:31:32.840 回答
0

来自维基

当对象存储在内存中但运行代码无法访问时,可能会发生内存泄漏。所以

would this be considered a memory leak?

不,这不是内存泄漏。

Would jvm garbage collect x ?

NO,因为线程永远不会结束。

于 2013-01-24T10:32:01.937 回答