Thread.sleep(long)が内部にある場合、Runnableはメモリリークを生成できますか?Thread.sleep(long)が内部にある場合、Runnableはメモリリークを生成できますか?
実行可能ファイルをrunnableの内部に置くと、危険がありますか?
Thread.sleep(long)が内部にある場合、Runnableはメモリリークを生成できますか?Thread.sleep(long)が内部にある場合、Runnableはメモリリークを生成できますか?
実行可能ファイルをrunnableの内部に置くと、危険がありますか?
あなたの質問に直接答えることはできません。run()
の実行可能ファイル内で呼び出されると、Thread.sleep
だけではメモリリークが発生しません。 A メモリリークは、実行中のコードから参照されていないオブジェクトがヒープメモリ内に存在する場合に発生します。だから、Thread.sleep
は参照リークオブジェクトを作成していないので、メモリリークが発生しにくい。
2番目の質問に答えるには、またNOです。私は、Runnable
は一般的に別のものと見なすことができないと言うべきである。Thread
、ランナブルはrun()
メソッドを持つ単純なinterface
である。別のスレッドで実行するにはRunnable
をThread
またはThread Pool
に提出することができます。その場合でも、別のThread
からのnew Thread
の作成と起動だけではメモリリークは発生しません。
私はこれに同意しません。あなたが提示したように、Runnableインターフェイスは簡単ではありません。私はRunnableを持つ他のプログラムでメモリリークの問題があることを知ったので、Runnable本体から外部フィールドへの基本呼び出しでメモリリークを作成する必要があります。非同期runnableとnever whileループの例で、Thread.sleep(long)による遅延を伴って実行可能な外部のフィールドを呼び出しているとします。この状況では、ガベージコレクタが正常に動作するとは思わない。すべてが「特別」であれば、実行可能ファイルをキャンセルすることが重要です。 –
実際には、GCはそのシナリオでは何もクリーンアップすべきではありません。 GCは、実行中のコードで参照されていないメモリをクリーンアップすることになっています。私はあなたが "何がJavaメモリリーク" [1]を読む必要があると思います。 引数 '' 'Runnable'''は単純であるかどうかは分かりませんが、自分でソースを読むことができます。ここにJavaソースがあります [1] https://plumbr.io/blog/memory -leaks/what-is-a-memory-leak [2] http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Runnable .java – Sudheera
ここでも同じ問題が議論されています。https://stackoverflow.com/questions/8914735/java-thread-sleep-leaking-threads –
短い答えは「はい」です - スレッドは '新しい'追加のオブジェクトに続けて 'Thread .sleep() 'をループで実行します。あなたのコードを投稿すると、コミュニティがより良い助けになるかもしれません。 – Ryan