run()
当线程内的方法完成或调用它的函数完成时,是否会收集线程垃圾?
我没有问题或任何东西,但我想避免内存泄漏等。
对于喜欢代码的人:
public void SomeClass {
public SomeClass() {
}
public void someMethod() {
Object data = veryBigObject;
while(true) {
MyThread thread = new MyThread(veryBigObject);
thread.run();
try {
Thread.sleep(1000);
} catch (InterruptedException e) { /* do nothing */ }
}
}
public static void main(String[] args) {
SomeClass myclass = SomeClass();
myclass.someMethod();
}
}
public class MyThread extends Thread {
private Object data;
public Thread(Object data) {
this.data = data;
}
public void run() {
// do stuff with data
}
}
在我知道的所有语言中,当方法结束时会收集垃圾(如果该语言有的话)。我认为Java也是如此。这意味着理论上我创建的线程someMethod()
直到someMethod()
结束才会被收集。如果我们假设 while 循环运行很长时间,应用程序将耗尽内存并崩溃。
我的问题:这是真的吗?如果是这样,应该怎么做才能避免呢?