深入理解java虛擬機(jī)讀書筆記一java運(yùn)行時(shí)數(shù)據(jù)區(qū)域

java運(yùn)行時(shí)數(shù)據(jù)區(qū)域:

1.程序計(jì)數(shù)器:當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器;

2.java虛擬機(jī)棧:每個(gè)方法執(zhí)行時(shí)都會(huì)創(chuàng)建一個(gè)棧幀,存儲(chǔ)局部變量表,操作數(shù)棧,動(dòng)態(tài)鏈接,方法出口等信息。另外在線程請(qǐng)求棧深度大于jvm允許時(shí)會(huì)拋出stackoverflow異常(無限遞歸);

3.本地方法棧:和虛擬機(jī)棧功能類似,只是本地方法棧為natve方法服務(wù);

4.java堆:java虛擬機(jī)管理的內(nèi)存中的最大的一塊,被所有線程共享,存放對(duì)象實(shí)例。是gc的主要區(qū)域;

5.方法區(qū):各線程共享,存儲(chǔ)已被虛擬機(jī)加載的類信息&常量&靜態(tài)變量&即時(shí)編輯器編譯后的代碼。Hotspot虛擬機(jī)上,使用永久代來實(shí)現(xiàn)方法區(qū)(java8之前);

6.運(yùn)行時(shí)常量池:方法區(qū)的一部分,存放編譯期生成的各種字面量和符號(hào)引用,具有動(dòng)態(tài)性(除了編譯期的常量外,運(yùn)行期間也會(huì)有新常量鍵入);

7.直接內(nèi)存,不是jvm運(yùn)行的數(shù)據(jù)區(qū)域和內(nèi)存區(qū)域,但是也被頻繁使用并會(huì)出現(xiàn)OOM。堆外內(nèi)存可以直接分配使用內(nèi)存,提高效率,比如NIO。

總結(jié):java運(yùn)行時(shí)數(shù)據(jù)區(qū)域包括程序計(jì)數(shù)器,java棧(包括虛擬機(jī)棧和本地方法棧),java堆,方法區(qū)(包括運(yùn)行時(shí)常量池)。程序計(jì)數(shù)器保存當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器.java棧是線程私有的,保存局部變量表&操作數(shù)棧&動(dòng)態(tài)鏈接&方法出口等信息。java堆是線程共享的,保存對(duì)象實(shí)例,對(duì)應(yīng)新生代和老年代。方法區(qū)也是線程共享的,保存加載類信息&常量&靜態(tài)變量&即時(shí)編輯器編譯后的代碼,對(duì)應(yīng)永久代(Hotspot中)。另外NIO等方法可以直接分配堆外內(nèi)存,提高效率。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容