VM內(nèi)存結(jié)構(gòu)大致如下:
其中白色塊部分是線(xiàn)程共享的蔚出,粉色塊是線(xiàn)程隔離的
堆
堆是JVM中最大的一塊內(nèi)存空間弟翘,絕大部分對(duì)象都存在堆內(nèi)存內(nèi),然后堆又可以做以下細(xì)分:
虛擬機(jī)棧
虛擬機(jī)棧由棧幀組成骄酗,每一次方法調(diào)用都會(huì)創(chuàng)建一個(gè)棧幀稀余,然后去壓棧。當(dāng)方法返回時(shí)趋翻,則對(duì)應(yīng)著出棧操作睛琳。
棧幀中包含局部變量表、操作數(shù)棧、指向運(yùn)行時(shí)常量池的引用师骗、方法返回地址历等、動(dòng)態(tài)鏈接。
方法里的變量在執(zhí)行時(shí)辟癌,會(huì)從局部變量表或?qū)ο髮?shí)例的字段里復(fù)制變量或常量寒屯,放入操作數(shù)棧,計(jì)算時(shí)則從操作數(shù)棧里放入或取走數(shù)據(jù)黍少。
Powered by Ad.Plus
本地方法棧
本地方法棧和虛擬機(jī)棧功能類(lèi)似寡夹,虛擬機(jī)棧管理JAVA方法,而本地方法棧管理NATIVE方法
程序計(jì)數(shù)器
用來(lái)記錄各個(gè)線(xiàn)程執(zhí)行的字節(jié)碼地址
方法區(qū)
方法區(qū)包含類(lèi)信息厂置、運(yùn)行時(shí)常量池菩掏、字符串常量池和靜態(tài)變量
靜態(tài)常量池:也叫class文件常量池,主要存放:
字面量:例如文本字符串昵济、final修飾的常量
符號(hào)引用:例如類(lèi)和接口的全限定名智绸、字段的名稱(chēng)和描述符、方法的名稱(chēng)和描述符
運(yùn)行時(shí)常量池:當(dāng)類(lèi)加載到內(nèi)存中后砸紊,JVM就會(huì)將靜態(tài)常量池中的內(nèi)容存放到運(yùn)行時(shí)的常量池中传于;運(yùn)行時(shí)常量池里面存儲(chǔ)的主要是編譯器間生成的字面量、符號(hào)引用等等
字符串常量池:也可以理解成運(yùn)行時(shí)常量池分出來(lái)的一部分醉顽,類(lèi)加載到內(nèi)存的時(shí)候,字符串會(huì)存到字符串常量池里面