这是一个java内存泄漏

时间:2013-01-24 10:27:01

标签: java garbage-collection jvm

更新:看起来它不是内存泄漏,是否有人根据此示例的扩展创建? 原始问题: 假设我创建并启动一个不终止的线程,线程创建一个对象并引用,只要它还活着。请参阅以下代码。 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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

jvm垃圾收集x?

不,原因线程仍然保持对它的尊重。

  

这会被视为内存泄漏吗?

不是真正的泄漏,而是浪费记忆。

答案 3 :(得分:0)

来自Wiki

  

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

would this be considered a memory leak?

不,这不是内存泄漏。

Would jvm garbage collect x ?

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