小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

好程序員Java學(xué)習(xí)路線分享JVM結(jié)構(gòu)

 好程序員IT 2019-05-31

jvm的基本結(jié)構(gòu),也就是我們俗稱概述。內(nèi)容很多,而且概念量也很大,關(guān)于概念方面,讓概念在你的腦子里變成圖形,所以只要你有耐心、仔細(xì)發(fā)揮自己的想象力,會(huì)讓你充滿信。當(dāng)然,不是說看完,就對(duì)jvm了解jvm學(xué)習(xí)的知識(shí)非常的多。在你看完,后續(xù)我們還會(huì)來學(xué)jvm的細(xì)節(jié),但是如果你在看完的前提下去學(xué)習(xí),再學(xué)習(xí)其他jvm的細(xì)節(jié)會(huì)事半功倍。

1、什么是java虛擬機(jī)

  首先我們先寫一個(gè)類

然后打開cmd窗口輸入:java test.JVMForJava,打開任務(wù)管理器-進(jìn)程,你看到一個(gè)叫java.exe的程序沒有,是的這就是java的虛擬機(jī),java xxx這個(gè)命令就是用來啟動(dòng)一個(gè)java虛擬機(jī),而main函數(shù)就是一個(gè)java應(yīng)用的入口,main函數(shù)被執(zhí)行時(shí),java虛擬機(jī)就啟動(dòng)了。好了ctrl+c結(jié)束你的jvm。在打開你的ecplise,右鍵run application,再run application一次,再次打開任務(wù)管理器-進(jìn)程,好了,我們看見會(huì)有兩個(gè)javaw.exe,為什么會(huì)有兩個(gè)?因?yàn)槲覀儎偛胚\(yùn)行了兩次run application。這里我是要告訴你,一個(gè)java的application對(duì)應(yīng)了一個(gè)java.exe/javaw.exe(java.exe和javaw.exe你可以把它看成java的虛擬機(jī),一個(gè)有窗口界面一個(gè)沒有)。你運(yùn)行幾個(gè)application就有幾個(gè)java.exe/javaw.exe?;蛘吒泳唧w的說,你運(yùn)行了幾個(gè)main函數(shù)就啟動(dòng)了幾個(gè)java應(yīng)用,同時(shí)也就啟動(dòng)了幾個(gè)java的虛擬機(jī)。

  什么是java虛擬機(jī)和虛擬機(jī)實(shí)例?java的虛擬機(jī)相當(dāng)于我們的一個(gè)java類,而java虛擬機(jī)實(shí)例,相當(dāng)我們new一個(gè)java類,不過java虛擬機(jī)不是通過new這個(gè)關(guān)鍵字而是通過java.exe或者javaw.exe來啟動(dòng)一個(gè)虛擬機(jī)實(shí)例。

2、jvm的生命周期

(1) 話不多說看代碼,然后ecplise里run application 之后在打開任務(wù)管理器-進(jìn)程,你會(huì)看到一個(gè)javaw.exe的虛擬機(jī)在跑,查看控制臺(tái)輸出,并觀察任務(wù)管理器中的javaw.exe什么時(shí)候消失。

 ?。ńY(jié)果我就不截圖了,太長了。)

  如果你觀察控制臺(tái)和任務(wù)管理器的javaw.exe會(huì)發(fā)現(xiàn),當(dāng)main函數(shù)的for循環(huán)打印完的時(shí)候,程序它跟我想的不一樣居然沒有退出,而等到整個(gè)new Thread()里的匿名類的run方法執(zhí)行結(jié)束后,javaw.exe才退出。我們知道在c++的win32編程(CreatThread()),main函數(shù)執(zhí)行完了,寄宿線程也跟著退出了,在c#中如果你用線程池(ThreadPool)的話,結(jié)論也是如此,線程都跟著宿主進(jìn)程的結(jié)束而結(jié)束。但是在java中貌似和我們的認(rèn)知有很大的出入,這是怎么回事,先不要看結(jié)果自己想想為什么。

  沒錯(cuò)這就是由于java的虛擬機(jī)中它有兩種線程,一種叫叫守護(hù)線程,一種叫非守護(hù)線程,main函數(shù)就是個(gè)非守護(hù)線程,虛擬機(jī)的gc就是一個(gè)守護(hù)線程。java的虛擬機(jī)中只要有任何非守護(hù)線程還沒有結(jié)束,java虛擬機(jī)的實(shí)例都不會(huì)退出,所以即使main函數(shù)這個(gè)非守護(hù)線程退出,但是由于在main函數(shù)中啟動(dòng)的匿名線程也是非守護(hù)線程,它還沒有結(jié)束,所以jvm沒辦法退出。

  java虛擬機(jī)的生命周期,當(dāng)一個(gè)java應(yīng)用main函數(shù)啟動(dòng)時(shí)虛擬機(jī)也同時(shí)被啟動(dòng),而只有當(dāng)在虛擬機(jī)實(shí)例中的所有非守護(hù)進(jìn)程都結(jié)束時(shí),java虛擬機(jī)實(shí)例才結(jié)束生命。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多