深入理解java虛擬機(jī)讀書筆記豌熄,第二章:Java內(nèi)存區(qū)域與內(nèi)存溢出異常

2.1概述

講解內(nèi)存各個(gè)區(qū)域的作用、服務(wù)對象以及其中可能產(chǎn)生的問題

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


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

當(dāng)前線程所執(zhí)行的字節(jié)碼的行號顯示器

每個(gè)線程都有獨(dú)立的程序計(jì)數(shù)器椒楣,既線程私有

線程執(zhí)行Java方法赴蝇,計(jì)數(shù)器記錄的是正在執(zhí)行的虛擬機(jī)字節(jié)碼指令的地址

線程執(zhí)行Native方法,計(jì)數(shù)器值為空

唯一一個(gè)在Java虛擬機(jī)規(guī)范中沒有OutOfMemoryError情況的區(qū)域

2.2.2Java棧

線程私有迎罗,生命周期和線程相同

Java方法執(zhí)行的內(nèi)存模型睬愤,每個(gè)方法在執(zhí)行的同時(shí)會創(chuàng)建一個(gè)棧幀,用于存儲局部變量表纹安,操作數(shù)棧尤辱,動態(tài)鏈接,方法出口等信息厢岂,方法調(diào)用到完成的過程光督,對應(yīng)著一個(gè)棧幀在虛擬機(jī)棧中的入棧到出棧的過程

局部變量表

編譯期可知的各種數(shù)據(jù)類型

對象引用

returnAddress類型:指向一條字節(jié)碼指令的地址

64位長度的long和double占兩個(gè)局部變量空間

內(nèi)存空間在編譯器分配完成

兩種異常:StackOverflowError:線程請求的棧深度大于虛擬機(jī)所允許的深度;OutOfMemoryError:動態(tài)擴(kuò)展時(shí)無法申請到足夠的內(nèi)存

2.2.3本地方法棧

使用native方法服務(wù)

也會拋出StackOverflowError和OutOfMemoryError

2.2.4 Java堆

被所有線程共享塔粒,虛擬機(jī)啟動的時(shí)候創(chuàng)建

唯一目的是存放對象實(shí)例

垃圾收集器管理的主要區(qū)域

劃分:更好的回收內(nèi)存或分配內(nèi)存【新生代(Eden结借、From Survivor、To Survivor)】【老年代】

可物理上不連續(xù)卒茬,邏輯上連續(xù)

2.2.5方法區(qū)

各個(gè)內(nèi)存共享

存放被虛擬機(jī)加載的類信息船老、常量、靜態(tài)變量圃酵、即時(shí)編譯器編譯的代碼等

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

方法區(qū)的一部分

Class文件中的常量池柳畔,用于存放編譯期生成的各種字面量和符號引用,類加載后進(jìn)入常量池存放

運(yùn)行期間也可以將新的常量放入常量池 String 的 intern()方法

2.2.7直接內(nèi)存

使用Native函數(shù)庫直接分配堆外內(nèi)存郭赐,通過一個(gè)存儲在JAVA堆中的DirectByteBuffer對象作為這塊內(nèi)存區(qū)域的引用直接操作


2.3HotSpot虛擬機(jī)對象探秘

堆中對象的創(chuàng)建薪韩、布局和訪問的全過程

2.3.1對象的創(chuàng)建

虛擬機(jī)遇到New指令

首先檢查指令的參數(shù)能否在常量池中定位到一個(gè)類的符號引用

檢查這個(gè)符號引用對應(yīng)的類是否已被加載、解析堪置、初始化過

沒有加載躬存,則需要先加載

為新生對象分配內(nèi)存區(qū)域(指針碰撞&空閑列表)

線程安全(方案1:對分配內(nèi)存空間的動作同步;方案2:本地線程分配緩沖 TLAB)

對對象進(jìn)行必要的設(shè)置

調(diào)用init方法

2.3.2對象的內(nèi)存布局

對象頭(存放對象自身的運(yùn)行時(shí)數(shù)據(jù)&類型指針)

實(shí)例數(shù)據(jù)

對齊填充

2.3.3對象的訪問定位

句柄訪問

直接指針


2.4實(shí)戰(zhàn):OutOfMemoryError異常


2.4.1 JAVA堆溢出

將堆的最小值-Xms和最大值-Xmx設(shè)置相同可避免堆自動擴(kuò)展

出現(xiàn)內(nèi)存溢出時(shí)內(nèi)存堆轉(zhuǎn)儲快照打右ㄏ恰:設(shè)置-XX:HeapDumpOnOutOfMemory


分析快照岭洲,對象是否必要?

內(nèi)存溢出:指程序在申請內(nèi)存時(shí)坎匿,沒有足夠的內(nèi)存空間供其使用盾剩。檢查堆大小替蔬;檢查對象生命周期告私、對象狀態(tài)過長的情況

內(nèi)存泄露:指程序在申請內(nèi)存后,無法釋放已申請的內(nèi)存空間承桥。分析泄露對象到GC Root的引用鏈


2.4.2虛擬機(jī)棧和本地方法棧溢出

棧容量由-Xss設(shè)定

減少線程數(shù)

更換64位虛擬機(jī)

減少最大堆和減少棧容量來換取更多的線程

2.4.3方法區(qū)和運(yùn)行時(shí)常量池溢出

2.4.4本機(jī)直接內(nèi)存溢出




參考文獻(xiàn):

[1] 深入理解Java虛擬機(jī) 第二版 --周志明


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驻粟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凶异,更是在濱河造成了極大的恐慌蜀撑,老刑警劉巖挤巡,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異酷麦,居然都是意外死亡矿卑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門沃饶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來母廷,“玉大人,你說我怎么就攤上這事糊肤∏倮ィ” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵馆揉,是天一觀的道長椎咧。 經(jīng)常有香客問我,道長把介,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任蟋座,我火速辦了婚禮拗踢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘向臀。我一直安慰自己巢墅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布券膀。 她就那樣靜靜地躺著君纫,像睡著了一般窍箍。 火紅的嫁衣襯著肌膚如雪屠尊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天裹匙,我揣著相機(jī)與錄音舒帮,去河邊找鬼会喝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛玩郊,可吹牛的內(nèi)容都是我干的肢执。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼译红,長吁一口氣:“原來是場噩夢啊……” “哼预茄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侦厚,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耻陕,失蹤者是張志新(化名)和其女友劉穎拙徽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淮蜈,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斋攀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梧田。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淳蔼。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖裁眯,靈堂內(nèi)的尸體忽然破棺而出鹉梨,到底是詐尸還是另有隱情,我是刑警寧澤穿稳,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布存皂,位于F島的核電站,受9級特大地震影響逢艘,放射性物質(zhì)發(fā)生泄漏旦袋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一它改、第九天 我趴在偏房一處隱蔽的房頂上張望疤孕。 院中可真熱鬧,春花似錦央拖、人聲如沸祭阀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽专控。三九已至,卻和暖如春遏餐,著一層夾襖步出監(jiān)牢的瞬間伦腐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工境输, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔗牡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓嗅剖,卻偏偏與公主長得像辩越,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子信粮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

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