1 回答

TA貢獻1895條經驗 獲得超3個贊
在寫Java程序時,通常我們管只有一個main函數而沒有別的Thread或Runnable的程序叫單線程程序。但是我們寫的這個所謂的單線程程序只是JVM這個程序中的一個線程,JVM本身是一個多線程的程序,至少得有一個垃圾收集器線程吧。
剛裝了一個NetBeans6.0,里面帶了一個分析器包,于是寫了一個HelloWorld程序,檢驗了一下JVM一啟動,里面會有幾個線程:
結果是:除了我的main線程以外,還有四個線程:
Finalizer 線程:在垃圾回收之前執行“對象完成”的Java系統線程
Signal Dispatcher 線程:為JVM處理本地操作系統信號的Java系統線程
Reference Handler 線程:將掛起的對象放到隊列中的高優先級Java系統線程。
Attach Listener 線程:用戶線程
我個人的猜測是:
Finalizer 線程的任務就是調用finalize()方法來進行垃圾回收。
Signal Dispatcher 線程的任務就是處理操作系統方面的東西,屏蔽操作系統,使Java達到跨平臺的事兒應該是它干的。
Reference Handler線程的任務就是將一個不用的對象打上標記,放到回收對象的隊列中,以便于Finalizer線程來進行釋放內存操作。
最后一個 Attach Listener 線程:這個應該是我的Java Profile線程了。跟JVM沒有關系。
所以,當一個最簡單的Java程序啟動時,JVM除了我們的main線程外,還會啟動3個線程。
- 1 回答
- 0 關注
- 852 瀏覽
添加回答
舉報