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

Wikiから

オブジェクトがメモリに格納されているが、実行中のコードからアクセスできない場合、メモリリークが発生する可能性があります。それで

would this be considered a memory leak?

いいえ、これはメモリリークではありません。

Would jvm garbage collect x ?

スレッドが終了することはないため、いいえ。

于 2013-01-24T10:32:01.937 に答える