私のマシンで JVM インスタンスを起動すると、単純なクラスが で無限スリープを実行していると、JVM にmain()
4 つの主要なスレッド (メイン スレッドを除く) が表示されます。
- リスナーをアタッチ
- 参照ハンドラ
- ファイナライザー
- シグナルディスパッチャー
- DestroyJavaVM
これらのコア JVM スレッドのそれぞれの目的を理解したいと思っています。簡単なインターネット検索から、これらのスレッドに関する次の詳細を見つけました。
- アタッチ リスナー: 動的アタッチには、ターゲット JVM にアタッチ リスナー スレッドがあります。これは、最初のアタッチ要求が発生したときに開始されるスレッドです。
- シグナル ディスパッチャー: OS が JVM にシグナルを送信すると、シグナル ディスパッチャー スレッドがそのシグナルを適切なハンドラーに渡します。
- Reference Handler : 保留中の参照をキューに入れる優先度の高いスレッド。GC は、処理が必要な参照の単純なリンク リストを作成し、このスレッドはそれらを適切なキューにすばやく追加し、ReferenceQueue リスナーに通知します。
- Finalizer : Finalizer スレッドはファイナライザー メソッドを呼び出します。
- DestroyJavaVM : このスレッドは、プログラムの終了時に Java VM をアンロードします。ほとんどの場合、待機する必要があります。
これらのスレッドと参照ドキュメント (既知の場合) の詳細 (または理解の修正) を知りたいです。