JVM虛擬機(jī)

  1. Java虛擬機(jī)的原理。
    所謂虛擬機(jī),就是一臺(tái)虛擬的機(jī)器,他是一款軟件,用來(lái)執(zhí)行一系列虛擬計(jì)算指令,大體上虛擬機(jī)可分為系統(tǒng)虛擬機(jī)和程序虛擬機(jī),他們完全是對(duì)物理的計(jì)算的仿真,提供一個(gè)可以運(yùn)行完整操作系統(tǒng)的軟件平臺(tái)。

    程序虛擬機(jī)典型代碼就是Java虛擬機(jī),他專門(mén)為執(zhí)行單個(gè)計(jì)算程序而計(jì)算,在Java虛擬機(jī)中執(zhí)行的指令我們稱為Java字節(jié)碼指令,無(wú)論是系統(tǒng)虛擬機(jī)還是程序虛擬機(jī),在上面運(yùn)行的軟件都被限制于虛擬機(jī)提供的資源中。

    Java發(fā)展至今,出現(xiàn)過(guò)很多虛擬機(jī),最初sun使用的一款叫做ClassIc的Java虛擬機(jī),到現(xiàn)在引用最廣泛的HotSpot虛擬機(jī),除了Sun以外,還有BEA的jrockit,目前jrockit和HostSopt都被Oracle收入旗下,大有整合的趨勢(shì)。

  2. 認(rèn)識(shí)Java虛擬機(jī)的基本結(jié)構(gòu).

    • 類加載系統(tǒng):負(fù)責(zé)從文件系統(tǒng)或者網(wǎng)絡(luò)加載Class信息,加載的信息存放在一塊稱之為方法區(qū)的內(nèi)存空間。
    • 方法區(qū):存放類的信息,常量信息,常量池信息,包括字符串字面量和數(shù)字常量
    • Java堆:在Java虛擬機(jī)啟動(dòng)的時(shí)候建立Java堆,他是Java程序最主要的內(nèi)存工作區(qū)域幾乎所有的對(duì)象實(shí)例都存放到Java堆中,堆空間是所有線程共享。
    • 直接內(nèi)存:JavaNio庫(kù)允許Java程序直接內(nèi)存,從而提高性能,通常直接內(nèi)存速度會(huì)優(yōu)于Java堆,(把數(shù)據(jù)直接放到內(nèi)存中)Redis
    • Java棧:每個(gè)虛擬機(jī)線程都有一個(gè)私有棧,一個(gè)線程的Java棧在線程創(chuàng)建的時(shí)候被創(chuàng)建,Java棧保存著局部變量,方法參數(shù),返回值等
    • 本地方法棧:和Java棧非常類似,最大不同為本地方法棧用于本地方法調(diào)用,
    • 垃圾回收系統(tǒng):Java的核心,也是不可少的,Java有一套自己的進(jìn)行垃圾清理的機(jī)制,開(kāi)發(fā)人員無(wú)需手工清理.
    • PC寄存器:寄存器也是每個(gè)線程私有的空間,Java虛擬機(jī)會(huì)為每個(gè)線程創(chuàng)建pc寄存器
    • 執(zhí)行引擎:虛擬機(jī)的核心組件就是執(zhí)行引擎,他負(fù)責(zé)執(zhí)行虛擬機(jī)的字節(jié)碼,一般會(huì)先進(jìn)行編譯成機(jī)器碼后執(zhí)行
  1. 總結(jié)

    具體劃分為如下5個(gè)內(nèi)存空間(非常重要)

    • 棧:存放局部變量
    • 堆:存放所有new出來(lái)的東西
    • 方法區(qū):被虛擬機(jī)加載是類信息,常量,靜態(tài)常量等
    • 程序計(jì)數(shù)器(和系統(tǒng)相關(guān))
    • 本地方法棧
  • Good Luck!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容