JVM生命週期

今天讀書的時候,讀到這樣一句“……java虛擬機退出時……”,我心生疑問,難道JVM還有進入?帶着疑問百度後得知了一些JVM聲明週期相關知識。

1.jvm的生命週期

一個運行時的java虛擬機實例的天職就是運行一個java程序。


1.1.JVM實例的誕生

        任何class文件的main函數都可認爲是jvm示例的起點。當一個程序啓動,伴隨的就是一個jvm實例的誕生,當這個程序關閉退出,這個jvm實例就隨之消亡。如果在同一臺機器上運行多個程序,將誕生相應數量的jvm實例,每個程序都有一個與之對應的jvm實例供其運行。任何一個擁有公開的(public)、靜態的(static)、沒有返回值(void)並且接受一個字符串數組參數(String[] args) 的main()函數的class都可以作爲JVM實例運行的起點 。


1.2.JVM實例的運行

         main()作爲該程序初始線程的起點,任何其他線程均由該線程啓動。JVM內部有兩種線程:守護線程和用戶線程,main()屬於用戶線程,守護線程通常由JVM自己使用,如GC線程。java程序也可以標明自己創建的線程是守護線程。java程序的初始線程 只就是運行main()的線程,這個線程是用戶線程,只要還有任何非守護線程還在運行,那麼jvm就存活着。


1.3.JVM實例的消亡

      當程序中的所有用戶線程都終止時,JVM才退出;若安全管理器允許,程序也可以使用java.lang.Runtime類或者java.lang.System.exit()來退出。

JVM退出可能原因分析

(1)執行了System.exit()方法。

(2)程序正常運行結束(程序的運行,是啓動JVM的一個進程,進程中包含一個主線程去運行應用程序)

(3)程序運行過程中遇到了異常或錯誤而異常退出(如在main函數中執行運行程序而不捕捉異常,而是在main方法將異常拋出,則此異常會拋至JVM致使進程終止)

(4)操作系統異常導致的JVM進程終止(JVM向下關聯不同類型的操作系統)

發佈了31 篇原創文章 · 獲贊 14 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章