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