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 ループが非常に長時間実行されると想定すると、アプリケーションはメモリ不足になり、クラッシュします。
私の質問: これは本当ですか? もしそうなら、それを避けるために何をすべきですか?