【筆記】JVM內(nèi)存模型

1. 簡(jiǎn)介

jvm_memory.png
  • 線程私有區(qū):

    • 程序計(jì)數(shù)器: 當(dāng)前線程字節(jié)碼地址。
    • 虛擬機(jī)棧: java方法棧幀堪澎。
    • 本地方法棧: native方法棧幀。
  • 線程共享區(qū):

    • Java堆: 存儲(chǔ)對(duì)象。
    • 方法區(qū): 存放類信息峻仇、常量、靜態(tài)變量邑商、編譯器編譯后的代碼等數(shù)據(jù)摄咆。
    • 常量池: 方法區(qū)的一部分,存放編譯器生成的各種字面量和符號(hào)引用人断。

2. 詳細(xì)分析

stack_heap_info.png

2.1 程序計(jì)數(shù)器

當(dāng)線程正在執(zhí)行一個(gè)Java方法時(shí)吭从,PC計(jì)數(shù)器記錄的是正在執(zhí)行的虛擬機(jī)字節(jié)碼的地址;當(dāng)線程正在執(zhí)行的一個(gè)Native方法時(shí)恶迈,PC計(jì)數(shù)器則為空(Undefined)涩金。

2.2 虛擬機(jī)棧

java方法的棧幀包括:

  1. 局部變量表 (locals大小,編譯期確定)暇仲,一組變量存儲(chǔ)空間步做, 容量以slot為最小單位。

  2. 操作棧(stack大小熔吗,編譯期確定)辆床,操作棧元素的數(shù)據(jù)類型必須與字節(jié)碼指令序列嚴(yán)格匹配

  3. 動(dòng)態(tài)連接, 指向運(yùn)行時(shí)常量池中該棧幀所屬方法的引用桅狠,為了 動(dòng)態(tài)連接使用讼载。

    • 前面的解析過(guò)程其實(shí)是靜態(tài)解析;
    • 對(duì)于運(yùn)行期轉(zhuǎn)化為直接引用中跌,稱為動(dòng)態(tài)解析咨堤。
  4. 方法返回地址

    • 正常退出,執(zhí)行引擎遇到方法返回的字節(jié)碼漩符,將返回值傳遞給調(diào)用者
    • 異常退出一喘,遇到Exception,并且方法未捕捉異常,那么不會(huì)有任何返回值嗜暴。
  5. 額外附加信息凸克,虛擬機(jī)規(guī)范沒(méi)有明確規(guī)定,由具體虛擬機(jī)實(shí)現(xiàn)闷沥。

可能會(huì)出現(xiàn)的異常:

  • StackOverFlowError: 當(dāng)線程請(qǐng)求棧深度超出虛擬機(jī)棧所允許的深度時(shí)拋出

  • OutOfMemoryError: 部分java虛擬機(jī)會(huì)動(dòng)態(tài)拓展虛擬機(jī)棧萎战,當(dāng)Java虛擬機(jī)動(dòng)態(tài)擴(kuò)展到無(wú)法申請(qǐng)足夠內(nèi)存時(shí)拋出

2.3 本地方法棧

與虛擬機(jī)棧類似,有些java虛擬機(jī)將虛擬機(jī)棧和本地方法棧合二為一舆逃,比如Sun HotSpot虛擬機(jī)蚂维。

2.4 java堆

幾乎存放著所有的對(duì)象實(shí)例和數(shù)組數(shù)據(jù)戳粒。JIT編譯器有棧上分配、標(biāo)量替換等優(yōu)化技術(shù)虫啥,導(dǎo)致部分對(duì)象實(shí)例數(shù)據(jù)不存在Java堆蔚约,而是棧內(nèi)存。

java_object.png

2.5 方法區(qū)

2.6 運(yùn)行時(shí)常量池

存放編譯器生成的各種字面量符號(hào)引用涂籽。運(yùn)行時(shí)常量池除了編譯期產(chǎn)生的Class文件的常量池苹祟,還可以在運(yùn)行期間,將新的常量加入常量池又活,比較常見(jiàn)的是String類的intern()方法苔咪。

  • 字面量:與Java語(yǔ)言層面的常量概念相近锰悼,包含文本字符串柳骄、聲明為final的常量值等。

  • 符號(hào)引用:編譯語(yǔ)言層面的概念箕般,包括以下3類:

    • 類和接口的全限定名
    • 字段的名稱和描述符
    • 方法的名稱和描述符
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耐薯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子丝里,更是在濱河造成了極大的恐慌曲初,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杯聚,死亡現(xiàn)場(chǎng)離奇詭異臼婆,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)幌绍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門颁褂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人傀广,你說(shuō)我怎么就攤上這事颁独。” “怎么了伪冰?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵誓酒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我贮聂,道長(zhǎng)靠柑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任吓懈,我火速辦了婚禮歼冰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骄瓣。我一直安慰自己停巷,他們只是感情好耍攘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著畔勤,像睡著了一般蕾各。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庆揪,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天式曲,我揣著相機(jī)與錄音,去河邊找鬼缸榛。 笑死吝羞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的内颗。 我是一名探鬼主播钧排,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼均澳!你這毒婦竟也來(lái)了恨溜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤找前,失蹤者是張志新(化名)和其女友劉穎糟袁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躺盛,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡项戴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了槽惫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片周叮。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖躯枢,靈堂內(nèi)的尸體忽然破棺而出则吟,到底是詐尸還是另有隱情,我是刑警寧澤锄蹂,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布氓仲,位于F島的核電站,受9級(jí)特大地震影響得糜,放射性物質(zhì)發(fā)生泄漏敬扛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一朝抖、第九天 我趴在偏房一處隱蔽的房頂上張望啥箭。 院中可真熱鬧,春花似錦治宣、人聲如沸急侥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坏怪。三九已至贝润,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铝宵,已是汗流浹背打掘。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹏秋,地道東北人尊蚁。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像侣夷,于是被迫代替她去往敵國(guó)和親横朋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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