Java スレッド: ガベージ コレクションが行われたかどうか?
この Java コード スニペットでは、新しいスレッドが作成され、t.start( )。ただし、スレッドの開始後、スレッド参照 t は t = null として null に設定されます。これにより、スレッドがアクティブな参照なしにガベージ コレクションされるかどうかという疑問が生じます。
Java のガベージ コレクション
ガベージ コレクターが Java で実行される場合、プログラムのアクティブな部分からアクセスできなくなったオブジェクトを特定して削除します。この場合、スレッドは実行を続ける匿名クラスとして作成されます。メイン スレッドの t 参照が null に設定されていても、スレッド自体はアクティブなままであり、すぐにはガベージ コレクションされません。
スレッドがアクティブのままである理由
A実行中のスレッドはガベージ コレクション ルートとみなされます。これは、ガベージ コレクタによって到達可能であるとみなされることを意味します。スレッドが実行中である限り、スレッドが参照するオブジェクトがガベージ コレクションされるのを防ぎます。
この場合、スレッドはスタック トレース、スレッド状態、スレッドなどの独自の内部データ構造を参照しています。共有メモリ。スレッドはガベージ コレクション ルートであることにより、これらの内部オブジェクトへのアクセスが確保されます。
ガベージ コレクション ルートとしてのメイン スレッド
同様に、メイン スレッドは、ガベージ コレクション ルートとしても機能します。ガベージ コレクション ルート。メインスレッドへの明示的な参照がない場合でも、メインスレッドはアクティブで実行中です。その結果、それ自体とそれが参照するオブジェクトがガベージ コレクションされるのを防ぎます。
結論
したがって、このコード スニペットでは、スレッドは無期限に実行され続けます。これはガベージ コレクション ルートとみなされます。メインスレッドからの明示的な参照がないという事実は、アクティブなままであり、参照するオブジェクトに到達可能な状態を保つため、問題ではありません。ガベージ コレクターはスレッドが終了したときにのみスレッドを収集し、ガベージ コレクション ルートとはみなされなくなります。
以上がJava でスレッドの参照が Null に設定されている場合、スレッドはガベージ コレクションされますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。