java 虛擬機器的生命週期

Coding-lover發表於2015-10-20

一個執行時的Java虛擬機器例項的天職是:負責執行一個java程式。當啟動一個Java程式時,一個虛擬機器例項也就誕生了。當該程式關閉退出,這個虛擬機器例項也就隨之消亡。如果同一臺計算機上同時執行三個Java程式,將得到三個Java虛擬機器例項。每個Java程式都執行於它自己的Java虛擬機器例項中。

Java虛擬機器例項通過呼叫某個初始類的main()方法來執行一個Java程式。而這個main()方法必須是共有的(public)、靜態的(static)、返回值為void,並且接受一個字串陣列作為引數。任何擁有這樣一個main()方法的類都可以作為Java程式執行的起點。

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Hello World");
    }

}

在上面的例子中,Java程式初始類中的main()方法,將作為該程式初始執行緒的起點,任何其他的執行緒都是由這個初始執行緒啟動的。

在Java虛擬機器內部有兩種執行緒:守護執行緒和非守護執行緒。守護執行緒通常是由虛擬機器自己使用的,比如執行垃圾收集任務的執行緒。但是,Java程式也可以把它建立的任何執行緒標記為守護執行緒。而Java程式中的初始執行緒——就是開始於main()的那個,是非守護執行緒。

只要還有任何非守護執行緒在執行,那麼這個Java程式也在繼續執行。當該程式中所有的非守護執行緒都終止時,虛擬機器例項將自動退出。假若安全管理器允許,程式本身也能夠通過呼叫Runtime類或者System類的exit()方法來退出。

轉載自:JAVA虛擬機器的生命週期
參考:一個java虛擬機器只能支援一個程式嗎?看到網上說用processbuilder啟動子程式的話會生成一個新的java虛擬機器來執行這個程式,這樣貌似很浪費資源,有沒有可能在同一個java虛擬機器上執行多個程式呢?

相關文章