Java スレッド: ガベージ コレクションが行われたかどうか?
この Java コード スニペットでは、新しいスレッドが作成され、 t.start( )。ただし、スレッドの開始後、スレッド参照 t は t = null として null に設定されます。これにより、スレッドがアクティブな参照なしにガベージ コレクションされるかどうかという疑問が生じます。
Java のガベージ コレクション
Java でガベージ コレクタが実行される場合、プログラムのアクティブな部分からアクセスできなくなったオブジェクトを特定して削除します。この場合、スレッドは実行を続ける匿名クラスとして作成されます。メイン スレッドの t 参照が null に設定されていても、スレッド自体はアクティブなままであり、すぐにはガベージ コレクションされません。
スレッドがアクティブのままになる理由
A実行中のスレッドはガベージ コレクション ルートとみなされます。これは、ガベージ コレクタによって到達可能であるとみなされることを意味します。スレッドが実行中である限り、スレッドが参照するオブジェクトがガベージ コレクションされるのを防ぎます。
この場合、スレッドはスタック トレース、スレッド状態、スレッドなどの独自の内部データ構造を参照しています。共有メモリ。ガベージ コレクション ルートであることにより、スレッドはこれらの内部オブジェクトに確実にアクセスできるようになります。
ガベージ コレクション ルートとしてのメイン スレッド
同様に、メイン スレッドは、ガベージ コレクション ルートとしても機能します。ガベージ コレクション ルート。メインスレッドへの明示的な参照がない場合でも、メインスレッドはアクティブで実行中です。その結果、それ自体とそれが参照するオブジェクトがガベージ コレクションされるのを防ぎます。
結論
したがって、このコード スニペットでは、スレッドは無期限に実行され続けます。これはガベージ コレクション ルートとみなされます。メインスレッドからの明示的な参照がないという事実は、アクティブなままであり、参照するオブジェクトに到達可能な状態を維持するため、問題ではありません。ガベージ コレクターはスレッドが終了したときにのみスレッドを収集し、ガベージ コレクション ルートとはみなされなくなります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3