2013-10-17 71 views
7

在我的機器上啓動一個JVM實例,用一個簡單的類main()運行無限的睡眠,我看到四個關鍵線程(除了主線程)在JVM:JVM芯線

  1. 連接監聽器
  2. 參考處理程序
  3. 終結
  4. 信號分派器
  5. DestroyJavaVM

我很想知道每個核心JVM線程的目的。從快速的互聯網搜索,我發現這些線程以下細節:

  1. 附加監聽:動態連接在 目標JVM的連接監聽線程。這是在發生第一個附加請求時啓動的線程。
  2. 信號調度程序:當OS向JVM發出信號時,信號調度程序線程會將信號傳遞給合適的 處理程序。
  3. 參考處理程序:高優先級線程排隊掛起 參考。 GC創建一個簡單的參考鏈接列表,其中需要處理 ,並且該線程將其快速添加到正確的 隊列中,並通知ReferenceQueue偵聽器。
  4. 終結者:終結器線程調用終結器方法。
  5. DestroyJavaVM:此線程在程序退出時卸載Java VM。大部分時間應該等待。

我想知道關於這些線程和參考文檔(如果知道)的更多細節(或理解的更正)。

回答

3

你已經非常明白了,我會添加的唯一進一步說明是附加監聽器線程(負責動態連接)。這不是通常使用的,但實質上允許另一個進程在正在運行的JVM中注入線程以查詢有關VM如何運行的某些詳細信息。它只在兩個Java虛擬機之間的實踐中使用(例如調試或分析時)(或者某些IDE在運行時顯示有關用戶代碼的其他信息)。

請注意,所有這些線程在很大程度上取決於實現,並且不一定在其他VM上(或者甚至是同一個VM的不同版本,或者具有不同選項的同一個VM).JVM可能啓動的核心線程數量與核心線程數量一樣多它在啓動時喜歡,那些(除了主線程)的數量和類型不受用戶控制。

+0

那麼「attach listner」是否也在某個特定的端口中偵聽?如果是,那麼它是哪一個? – sactiw