JAVA-(JVM)1.內(nèi)存管理和劃分

? ? ? ?Java虛擬機(jī)在執(zhí)行Java程序的過程中會(huì)把它所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域。這些區(qū)域都有各自的用途,以及創(chuàng)建和銷毀的時(shí)間,有的區(qū)域隨著虛擬機(jī)進(jìn)程的啟動(dòng)而存在,有些區(qū)域則依賴用戶線程的啟動(dòng)和結(jié)束而建立和銷毀。根據(jù)《Java虛擬機(jī)規(guī)范(Java SE 7版)》的規(guī)定,Java虛擬機(jī)所管理的內(nèi)存將會(huì)包括以下幾個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū)域,如圖所示。


JAVA虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)

1.堆內(nèi)存

? ? ? ?簡介:實(shí)例對(duì)象內(nèi)存分配區(qū)域,JVM啟動(dòng)時(shí)即分配該內(nèi)存,分配時(shí)可以不連續(xù)(只需邏輯連續(xù)即可),由于實(shí)例對(duì)象在該區(qū)域分配內(nèi)存,因此該區(qū)域的內(nèi)存占比在JVM所管理的內(nèi)存中是很大的(并不是固定不變),可通過參數(shù)動(dòng)態(tài)調(diào)節(jié)①。

? ? ? 垃圾回收:這個(gè)區(qū)域的內(nèi)存是GC(垃圾回收)活動(dòng)的主要區(qū)域,根據(jù)不同的垃圾回收器的回收機(jī)制,又可把該區(qū)域的內(nèi)存進(jìn)一步細(xì)化。

? ? ? 這里先介紹堆內(nèi)存分代


線程共享:該內(nèi)存是線程共享區(qū)域

2.方法區(qū)

? ? ? ?簡介:該區(qū)域用來存儲(chǔ)已被JVM加載的類信息,常量,靜態(tài)變量,和即時(shí)編譯器(JNI)編譯后的代碼等數(shù)據(jù)。該區(qū)域有一個(gè)運(yùn)行時(shí)常量池,用來存放靜態(tài)編譯(javac)產(chǎn)生的字面量和符號(hào)引用。該常量池具有動(dòng)態(tài)性,即常量并不一定是編譯時(shí)確定的,運(yùn)行時(shí)生成的常量也會(huì)存放到這個(gè)區(qū)域中。

? ? ? ?垃圾回收:該區(qū)域有時(shí)也成為永久代(代表垃圾回收活動(dòng)可在該區(qū)域活動(dòng)),但是事實(shí)情況是,該區(qū)域的GC活動(dòng)很少發(fā)生(需要耗費(fèi)很大的資源)。因此在這里進(jìn)行的垃圾回收主要是針對(duì)運(yùn)行時(shí)常量池和對(duì)類型的卸載。

? ? ? 線程共享:方法區(qū)是內(nèi)存共享的區(qū)域。

3.棧內(nèi)存

? ? ? 簡介:為java方法執(zhí)行服務(wù)的內(nèi)存。在線程執(zhí)行過程中,每個(gè)方法在執(zhí)行的時(shí)候都會(huì)創(chuàng)建一個(gè)棧幀(存放的是:局部變量表,操作數(shù)棧,動(dòng)態(tài)鏈接,方法出口等信息)。局部變量表中存放的是方法里面的基本數(shù)據(jù)類型(byte,short,int,long,double,float,boolean,char),returnAddress類型(指向一條字節(jié)碼執(zhí)行的存放地址),對(duì)象引用(這個(gè)對(duì)象引用可能執(zhí)行對(duì)象起始地址,也有可能代表對(duì)象的句柄或者與對(duì)象相關(guān)聯(lián)的位置)等。局部變量表所需的內(nèi)存空間在編譯期間確定。操作數(shù)棧的作用主要是用來存儲(chǔ)運(yùn)算結(jié)果以及運(yùn)算的操作數(shù),采用入棧出棧的方式來確定。

? ? ? 線程共享:棧內(nèi)存是線程私有的,生命周期和線程相同。

4.本地方法棧

? ? ?簡介:本地方法棧和棧內(nèi)存相似,不過本地方法棧是為native方法服務(wù)的。

? ? 線程共享:本地方法棧是線程私有的

5.程序計(jì)數(shù)器

簡介:程序計(jì)數(shù)器所需的內(nèi)存很小,當(dāng)字節(jié)碼解釋器工作時(shí),通過改變這個(gè)計(jì)數(shù)器的值選取需要執(zhí)行的下一條字節(jié)碼指令(可以理解為程序計(jì)數(shù)器存放的是下一條需要執(zhí)行的字節(jié)碼指令地址)。

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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