快速認(rèn)識(shí)Java虛擬機(jī)參數(shù) 存儲(chǔ)程序的類文件
Java虛擬機(jī)也是一個(gè)可運(yùn)行的程序,它或者全部用軟件方式來(lái)實(shí)現(xiàn),或者采用硬件或軟件結(jié)合的方式來(lái)實(shí)現(xiàn)。當(dāng)啟動(dòng)一個(gè)Java程序時(shí),就會(huì)運(yùn)行一個(gè)Java虛擬機(jī),每個(gè)Java程序都會(huì)對(duì)應(yīng)一個(gè)Java虛擬機(jī),運(yùn)行中的Java虛擬機(jī),也可以稱為Java虛擬機(jī)的一個(gè)實(shí)例。Java程序運(yùn)行結(jié)束關(guān)閉后,運(yùn)行這個(gè)程序的Java虛擬機(jī)也會(huì)關(guān)閉。例如,如果在電腦運(yùn)行了三個(gè)Java程序,就會(huì)有三個(gè)Java虛擬機(jī)在運(yùn)行。
java程序與虛擬機(jī)實(shí)例關(guān)系圖
每個(gè)Java程序的主類都會(huì)有一個(gè)main()方法,虛擬機(jī)啟動(dòng)Java程序時(shí),它會(huì)調(diào)用主類的main()方法作為Java程序的入口,這個(gè)main()方法的訪問權(quán)限必須是public,并且是無(wú)返回值的靜態(tài)方法,方法的參數(shù)是一個(gè)String類型的數(shù)組。
下面是HelloWorld程序代碼:
HelloWorld程序只有一個(gè)HelloWorld類,HelloWorld類內(nèi)部必須有一個(gè)main()方法,當(dāng)HelloWorld程序運(yùn)行時(shí),虛擬機(jī)會(huì)調(diào)用HelloWorld類的main()方法作為HelloWorld程序的入口。
在Windows命令行窗口運(yùn)行HelloWorld程序的命令如下:
java HelloWorld
其中“java”就是虛擬機(jī)程序名稱,Windows會(huì)啟動(dòng)一個(gè)虛擬機(jī)實(shí)例,“java”后面的“HelloWorld”是包含main()方法已編譯的class文件名稱,虛擬機(jī)啟動(dòng)后,會(huì)加載HelloWorld.class文件到內(nèi)存,并調(diào)用HelloWorld.class文件內(nèi)的main()方法,HelloWorld程序進(jìn)入運(yùn)行狀態(tài),main()方法內(nèi)部的語(yǔ)句會(huì)得到執(zhí)行,當(dāng)main()方法內(nèi)部的所有語(yǔ)句都執(zhí)行完成后,main方法返回,HelloWorld程序結(jié)束,運(yùn)行這個(gè)HelloWorld程序的虛擬機(jī)實(shí)例也會(huì)退出。
虛擬機(jī)的體系結(jié)構(gòu)
虛擬機(jī)由類加載器、運(yùn)行數(shù)據(jù)區(qū)、執(zhí)行引擎、本地方法接口、本地方法庫(kù)組成。虛擬機(jī)體系結(jié)構(gòu)如下圖所示:
當(dāng)虛擬機(jī)運(yùn)行一個(gè)程序時(shí),它會(huì)使用類加載器加載Java程序的類文件,并且在計(jì)算機(jī)內(nèi)申請(qǐng)一塊內(nèi)存區(qū)域,作為運(yùn)行數(shù)據(jù)區(qū)。用來(lái)存儲(chǔ)程序的類文件、創(chuàng)建的靜態(tài)對(duì)象和實(shí)例對(duì)象、方法、局部變量、中間結(jié)果、方法的返回值等內(nèi)容。為了管理和有效地利用已申請(qǐng)的內(nèi)存區(qū)域,虛擬機(jī)把內(nèi)存劃分為堆、棧、方法區(qū)、程序計(jì)數(shù)器、本地方法棧。
運(yùn)行數(shù)據(jù)區(qū)的方法區(qū)存儲(chǔ)了包含程序使用import語(yǔ)句導(dǎo)入的JDK類庫(kù)在內(nèi)的類信息、各種常量、靜態(tài)變量、代碼編譯后的字節(jié)碼等內(nèi)容;本地方法棧用來(lái)存儲(chǔ)調(diào)用非java代碼編寫的方法(Native Method)使用到的數(shù)據(jù),這些方法包括用其它語(yǔ)言編寫的第三方庫(kù)和操作系統(tǒng)自身提供的API;堆用來(lái)存儲(chǔ)程序中動(dòng)態(tài)創(chuàng)建的類實(shí)例對(duì)象;棧用來(lái)存儲(chǔ)程序調(diào)用方法過程中,使用到的參數(shù)、局部變量、中間結(jié)果、返回值等內(nèi)容;程序計(jì)數(shù)器用來(lái)存儲(chǔ)當(dāng)前程序執(zhí)行的指令(指令可以理解為類中的可執(zhí)行代碼)。
執(zhí)行引擎負(fù)責(zé)執(zhí)行方法區(qū)中的字節(jié)碼,在執(zhí)行字節(jié)碼的過程中會(huì)在堆中創(chuàng)建實(shí)例對(duì)象,在棧中存取當(dāng)前方法調(diào)用的參數(shù)、局部變量、中間結(jié)果、返回值等,也會(huì)通過本地方法接口調(diào)用第三方庫(kù)方法和操作系統(tǒng)自身提供的API。
責(zé)任編輯:hnmd004
- 天天消息!tp-link路由器怎么樣?tp-link路2023-06-14
- 大盤股和板塊股的區(qū)別是什么?大盤股上市對(duì)2023-06-14
- 怎么買一個(gè)合適的外接閃光燈?使用外接式閃2023-06-14
- 計(jì)算機(jī)啟動(dòng)修復(fù)要多久?啟動(dòng)修復(fù)可以強(qiáng)制2023-06-14
- 每日消息!電腦顯卡風(fēng)扇轉(zhuǎn)速怎么調(diào)?怎么在B2023-06-14
- 纖體咖啡有副作用嗎?咖啡喝多了對(duì)身體有什2023-06-14
- 基金清盤是不是賠慘了?基金一直跌會(huì)被清盤2023-06-14
- 美股的錢怎么轉(zhuǎn)回國(guó)內(nèi)?為什么中國(guó)人不能買2023-06-14
- 購(gòu)買空氣炸鍋需要注意哪些問題?如何清潔空2023-06-14
- 中國(guó)農(nóng)業(yè)大學(xué)是211還是985?農(nóng)業(yè)大學(xué)是冷門2023-06-14
- 焦點(diǎn)滾動(dòng):澳大利亞主帥:世界杯前43分鐘成2023-06-14
- 雞蛋怎么孵化成小雞?人工孵雞蛋最簡(jiǎn)單的方2023-06-14
- 6月13日四川發(fā)布山洪災(zāi)害藍(lán)色預(yù)警2023-06-14
- 五月天是什么時(shí)候出道的?五月天哪首歌曲最2023-06-14
- 天天熱點(diǎn)評(píng)!電競(jìng)顯示器怎么選?哪個(gè)電競(jìng)顯2023-06-14
- 股票為什么會(huì)產(chǎn)生異常波動(dòng)?尾盤拉升第二天2023-06-14
- 勞動(dòng)法年假規(guī)定怎么休?勞動(dòng)法年假補(bǔ)償標(biāo)準(zhǔn)2023-06-14
- win10怎么取消開機(jī)密碼?win10密碼過期進(jìn)不2023-06-14
- 如何升級(jí)客戶端版本?手機(jī)客戶端怎么打開?2023-06-14
- 世界快看點(diǎn)丨WIN10右下角天氣怎么關(guān)?win102023-06-14
- 喝咖啡不能提神怎么回事?喝咖啡一次喝多少2023-06-14
- 清倉(cāng)和半倉(cāng)有什么區(qū)別?北交所中簽100股能賺2023-06-14
- 申購(gòu)新股最多可以配多少個(gè)號(hào)?新股申購(gòu)配號(hào)2023-06-14
- 環(huán)球視訊!提前還車貸會(huì)影響征信嗎?車貸提2023-06-14
- 內(nèi)馬爾和姆巴佩誰(shuí)才是球隊(duì)老大??jī)?nèi)馬爾和梅2023-06-14
- 房貸轉(zhuǎn)貸有什么風(fēng)險(xiǎn)?按揭房轉(zhuǎn)貸貸款可靠嗎2023-06-14
- 雅迪冠能探索E10電動(dòng)車亮相 售價(jià)從4990元2023-06-14
- 漲浮不定與漲幅不定的區(qū)別是什么?漲幅和漲2023-06-14
- 保溫杯有涂層的目的是什么?保溫杯什么材質(zhì)2023-06-14
- 蘋果手機(jī)可以更新系統(tǒng)嗎?蘋果手機(jī)發(fā)熱發(fā)燙2023-06-14