一個(gè)運(yùn)行時(shí)的java虛擬機(jī)實(shí)例的天職就是:負(fù)責(zé)運(yùn)行一個(gè)java程序。
*當(dāng)啟動(dòng)一個(gè)java程序時(shí),一個(gè)虛擬機(jī)實(shí)例也就誕生了。
*當(dāng)該程序關(guān)閉退出,這個(gè)虛擬機(jī)實(shí)例也就隨之消亡。
如果在同一臺(tái)計(jì)算機(jī)上同時(shí)運(yùn)行三個(gè)java程序,將得到三個(gè)java虛擬機(jī)實(shí)例。每個(gè)java程序都運(yùn)行在他自己的java虛擬機(jī)實(shí)例中。
java虛擬機(jī)實(shí)例通過調(diào)用某個(gè)初始化類的main() 方法來(lái)運(yùn)行一個(gè)java程序。這個(gè)main()方法必須是公有的(public)、靜態(tài)的(static),返回值為void ,并且接受一個(gè)字符串?dāng)?shù)組作為參數(shù)。
任何擁有這樣一個(gè)main()方法的類都可以作為java程序運(yùn)行的起點(diǎn)。
java程序初始化類中的mian() 方法,將作為該程序初始線程的起點(diǎn),任何其他的線程都是由這個(gè)初始線程啟動(dòng)的。
java虛擬機(jī)內(nèi)部有兩個(gè)線程:守護(hù)線程和非守護(hù)線程。
*守護(hù)線程通常是由虛擬機(jī)自己使用的,比如執(zhí)行垃圾收集任務(wù)的線程。(守護(hù)線程是一種“在后臺(tái)提供通用性支持“的線程)
*java程序中的初始線程----就是開始于main() 的那個(gè),是非守護(hù)線程。
只要還有任何非守護(hù)線程在運(yùn)行,那么這個(gè)java程序也在繼續(xù)運(yùn)行(虛擬機(jī)仍然存活)當(dāng)該程序中所有的非守護(hù)線程都中止時(shí),虛擬機(jī)實(shí)例將自動(dòng)自動(dòng)退出。假若安全管理器允許,程序本身也能夠通過調(diào)用Runtime類或者System類的exit()方法退出。