認識Java虛擬機的基本結(jié)構(gòu)
Java虛擬機的架構(gòu)
- 類加載子系統(tǒng):加載Class信息,存放于稱為方法區(qū)的內(nèi)存空間
- 方法區(qū):存放類信息,存放運行時常量池信息,包括字符串字面量和數(shù)字常量
- Java堆:虛擬機啟動時建立乱豆,存放Java對象實例
- 直接內(nèi)存:Java堆外的,直接向系統(tǒng)申請的內(nèi)存區(qū)間吊趾,速度會優(yōu)于Java堆宛裕,大小不會直接受限于Xmx指定的最大堆大小瑟啃,但系統(tǒng)內(nèi)存是有限的,Java堆和直接內(nèi)存的總和依然受限于操作系統(tǒng)能給定的最大內(nèi)存
- 垃圾回收系統(tǒng):可以對方法區(qū)揩尸,Java堆和直接內(nèi)存進行回收
- Java棧:每一個Java虛擬機線程都有一個私有的Java棧蛹屿,一個線程的Java棧在線程創(chuàng)建的時候被創(chuàng)建,Java棧中保存著幀信息岩榆,局部變量错负,方法參數(shù),同時和Java方法的調(diào)用勇边、返回密切相關(guān)
- 本地方法棧:用于本地方法的調(diào)用(通常使用C編寫)
- PC寄存器:每個線程私有的空間犹撒,Java虛擬機會為每一個Java線程創(chuàng)建PC寄存器。在任意時刻粒褒,一個Java線程總是在執(zhí)行一個方法识颊,這個正在被執(zhí)行的方法稱為當前方法。如果當前方法不是本地方法奕坟,PC寄存器就會指向當前正在被執(zhí)行的指令祥款,如果當前方法是本地方法,那么PC寄存器的值就是undefined
- 執(zhí)行引擎:Java虛擬機核心組件之一月杉,負責執(zhí)行虛擬機的字節(jié)碼