1.Java虛擬機的生命週期
每個Java程序都運行於某個具體的Java虛擬機實現的實例上。當啓動一個Java程序時,一個虛擬機實例就誕生了。當該程序關閉時,虛擬機實例也隨之消亡。如果在同一臺計算機上同時運行三個Java程序,將得到三個Java虛擬機實例。
每個虛擬機實例通過調用某個初始類的main()方法來運行一個Java程序。這個main()方法必須是public,static,返回值爲void,並且接受一個字符串數組作爲參數。任何擁有這樣一個main()方法的類都可以作爲Java程序運行的起點。main()方法的聲明如下:
public static void main(String[] args) {}
Java程序初始類中的main()方法,將作爲該程序初始線程的起點,任何其他的線程都是由這個初始線程啓動的。JVM內部有兩種線程:守護線程和非守護線程(用戶線程)。守護線程通常由JVM自己使用,如執行垃圾收集任務的線程;也可以將創建的線程標記爲守護線程(調用setDeamon()方法創建一個守護線程,守護線程創建的線程默認爲守護線程),它從屬於創建它的線程,當主線程結束時,守護線程也隨之消亡。不是守護線程的線程稱爲用戶線程。用戶線程有自己的生命週期,不依賴於創建它的線程。只要還有任何非守護線程在運行,那麼這個Java程序也在運行,當然JVM也仍然存活。
2.JVM的內部體系結構
Java虛擬機的內部體系結構如下圖所示: