更新:看起来不是内存泄漏,有人会基于这个例子的扩展创建吗?
原始问题:假设我创建并启动了一个没有终止的线程,只要它还活着,这个线程就会创建一个对象和引用。请参见以下代码。JVM会对x进行垃圾回收吗?这会被认为是内存泄漏吗?
public class MyRunnable implements Runnable{
public void run(){
X x = new X();
while(true){}
}
}
Thread t = new Thread(new MyRunnable());
t.start();发布于 2013-01-24 18:29:55
线程永远不会终止,因此垃圾收集器永远不会释放x。然而,如果你从来没有真正使用过x,它可能会被优化掉。如果你确实使用了x,这不可能是一个内存泄漏--你使用的是内存。
发布于 2013-01-24 18:31:31
x具有方法作用域,并且在方法返回或显式执行x = null之前,x不会被垃圾收集。不,这不会被认为是泄漏。
发布于 2013-01-24 18:31:33
会对x进行垃圾回收吗?
不,因为线程还在维护对它的引用。
这会被认为是内存泄漏吗?
不是真正的泄漏,而是内存的浪费。
https://stackoverflow.com/questions/14499058
复制相似问题