Java虛擬機(jī)會(huì)在執(zhí)行Java程序的時(shí)候纯衍,把它管理的內(nèi)存區(qū)域劃分為若干不同的數(shù)據(jù)區(qū)域蔗衡。這里竖共,按照是否線程共享劃分:
線程私有的:【程序計(jì)數(shù)器】【虛擬機(jī)楎眩】【本地方法棧】
線程共享的:【堆】【方法區(qū)】
程序計(jì)數(shù)器
比較小的空間公给,當(dāng)前線程執(zhí)行的字節(jié)碼的行號(hào)指示器.因?yàn)榫€程切換的需要借帘,線程必須知道切換回來后執(zhí)行的位置。保存的是正在執(zhí)行的虛擬機(jī)字節(jié)碼指令的地址淌铐。
虛擬機(jī)棧
Java方法執(zhí)行的內(nèi)存模型肺然。一個(gè)方法被調(diào)用到結(jié)束,意味著一個(gè)棧幀的創(chuàng)建腿准、進(jìn)棧际起、出棧。(棧幀以后細(xì)說)
本地方法棧
與虛擬機(jī)棧類似吐葱,是Java虛擬機(jī)調(diào)用本地方法的內(nèi)存模型街望。
堆
是內(nèi)存最大的一塊空間,不要求物理連續(xù)弟跑,只要求邏輯連續(xù)灾前。所有的對象實(shí)例和數(shù)組都是在堆上分配。
方法區(qū)
用于存儲(chǔ)已經(jīng)被虛擬機(jī)加載的類信息窖认、常量豫柬、靜態(tài)變量告希、即時(shí)編譯器編譯后的代碼
add:運(yùn)行時(shí)常量池
class文件有一個(gè)部分叫常量池,存放編譯時(shí)期生成的字面量和引用烧给。在類加載進(jìn)入方法區(qū)后燕偶,這部分內(nèi)容會(huì)進(jìn)入到運(yùn)行時(shí)常量池里面。