JVM(Java虛擬機(jī))
JVM(Java Virtual Machine)Java虛擬機(jī)是學(xué)習(xí)Java的一個(gè)重要知識(shí)點(diǎn)雏门,所以我們來(lái)開(kāi)啟JVM的學(xué)習(xí)之路吧吼虎!
PS:本文需要一些Java基礎(chǔ)才能更好的理解
JVM體系結(jié)構(gòu)
JVM的學(xué)習(xí)就先從體系結(jié)構(gòu)開(kāi)始,結(jié)構(gòu)如下圖
- 字節(jié)碼文件(Class files)——字節(jié)碼文件是我們?cè)诰幾g源文件(.java)之后產(chǎn)生的
- 類(lèi)加載器(Class Loader)——通過(guò)解析字節(jié)碼文件的類(lèi)相關(guān)的信息,并通過(guò)類(lèi)加載器加載所有需要的信息
- 運(yùn)行數(shù)據(jù)區(qū)(Runtime Data Area)——該區(qū)域是在Java程序運(yùn)行的時(shí)候使用到的數(shù)據(jù)的存放、執(zhí)行位置等
- 方法區(qū)(Method Area)——方法區(qū)通常存放比較穩(wěn)定的共享資源(單進(jìn)程內(nèi)),例如:類(lèi)信息俺抽、字面量、常量等
- 堆(heap)——通常存儲(chǔ)可回收的共享資源(單進(jìn)程內(nèi))较曼,例如:大部分對(duì)象磷斧、數(shù)組元素等
- Java棧(Java stack)——存儲(chǔ)線(xiàn)程內(nèi)使用資源,并且線(xiàn)程私有捷犹,存儲(chǔ)的資源有:基礎(chǔ)數(shù)據(jù)類(lèi)型弛饭、部分引用數(shù)據(jù)類(lèi)型的數(shù)據(jù)、部分引用數(shù)據(jù)類(lèi)型的引用等
本地方法棧(Native Method Stack)——Java在使用某些方法的時(shí)候萍歉,會(huì)調(diào)用一些native的方法侣颂,如圖:
- 程序計(jì)數(shù)器(Program Counter Register)——程序計(jì)數(shù)器為線(xiàn)程,線(xiàn)程私有枪孩,記錄程序執(zhí)行的位置憔晒,當(dāng)程序執(zhí)行到本地方法的時(shí)候程序計(jì)數(shù)器置為undefined
- 執(zhí)行引擎(Execution Engine)——執(zhí)行引擎負(fù)責(zé)執(zhí)行字節(jié)碼的運(yùn)行邏輯
- 本地方法接口(Native Interface)——讓Java有著更好的擴(kuò)展能力,利用C/C++等實(shí)現(xiàn)的高效代碼來(lái)為Java程序提供良好的擴(kuò)展實(shí)現(xiàn)蔑舞,Java程序本身通過(guò)直接調(diào)用即可完成拒担。
總結(jié)
這期非常簡(jiǎn)單的介紹了一些JVM的體系結(jié)構(gòu),希望可以給大家拋磚引玉的作用攻询,感興趣的小伙伴自行查找資料从撼。之后不定期的圍繞虛擬機(jī)進(jìn)行展開(kāi)交流。