K6—1/15《深入理解JAVA虛擬機》第二章(上半部分)JAVA虛擬機內(nèi)存構(gòu)成和對象的創(chuàng)建、存儲過程


知識總結(jié)

一.JAVA虛擬機內(nèi)存劃分:

? ? ? ? 以常用的HotSpot虛擬機為研究對象附帽,JAVA虛擬機管理的內(nèi)存大致包括以下幾個部分:程序計數(shù)器埠戳、虛擬機棧、本地方法棧蕉扮、堆整胃、方法區(qū)、運行時常量池慢显。

? ? ? ? 程序計數(shù)器:可以把它看做是當前線程所執(zhí)行的字節(jié)碼的行號指示器爪模。不論是單核還是多核的CPU,每個線程都會有一個獨立的程序計數(shù)器荚藻,因而程序計數(shù)器是線程私有的屋灌。

? ? ? ? 虛擬機棧:它就是我們常說的“棧內(nèi)存”,用來存放與方法有關(guān)的局部變量信息应狱、方法出口等共郭。虛擬機執(zhí)行每個方法時,都會從“棧內(nèi)存”中劃分出一個“棧幀”供此方法單獨使用疾呻。因為特定的“棧幀”只被某個特定的線程獨享除嘹,所以虛擬機棧也是線程私有的。

? ? ? ? 本地方法棧:本地方法棧與虛擬機棧的功能相似岸蜗,唯一的區(qū)別是尉咕,本地方法棧只為虛擬機調(diào)用到的Native方法服務(wù)。

? ? ? ? 堆:堆內(nèi)存是虛擬機管理的最大一塊內(nèi)存璃岳,主要用于存放JAVA實例對象年缎。堆內(nèi)存是GC(垃圾收集器)管理的主要區(qū)域悔捶,目前GC主要采用分代收集算法。堆內(nèi)存被所有線程共享单芜。

? ? ? ? 方法區(qū):方法區(qū)用于存儲已被虛擬機加載的類信息蜕该、常量、靜態(tài)變量等洲鸠。方法區(qū)中的大部分數(shù)據(jù)都是“有進無出”的堂淡,通常只在“類卸載”和“常量池回收”兩種情況下,才會被GC回收掉一部分內(nèi)存扒腕。方法區(qū)被所有線程共享绢淀。

? ? ? ? 運行時常量池:運行時常量池是方法區(qū)的一部分,用于存放編譯期生成的各種字面量和符號引用袜匿。比如:我們通過非new的方式定義的String類型的值更啄,就存放在這里稚疹。


二.對象的創(chuàng)建過程

? ? ? ? 主要分為5步:一居灯,檢查對象涉及的所有類是否已完成加載内狗。二,為新生對象分配內(nèi)存空間柳沙。三赂鲤,將分配的內(nèi)存都初始化為零。四数初,對對象進行必要的信息設(shè)置。五车摄,執(zhí)行init方法仑鸥,完成對象的初始化。


三.對象的存儲結(jié)構(gòu):

? ? ? ? 對象在內(nèi)存中的存儲布局眼俊,分為3塊區(qū)域:對象頭疮胖、實例數(shù)據(jù)誊役、對齊填充谷市。

? ? ? ? 對象頭用于存儲對象自身的描述信息和元數(shù)據(jù)的類型指針,實例數(shù)據(jù)是存放對象內(nèi)容的主要區(qū)域鹏漆,對齊填充是為了適應(yīng)HotSpot虛擬機而做的地址偏移创泄,無實際意義鞠抑。


四.對象的訪問定位:

? ? ? ? 對象的訪問定位,主要有句柄和直接指針兩種方式搁拙。

? ? ? ? 句柄:在堆中劃分出一塊內(nèi)存作為句柄池,棧中保存句柄池的地址酪碘,句柄池中保存對象實例數(shù)據(jù)的指針和對象類型數(shù)據(jù)的指針兴垦,通過這兩個指針來尋找堆中的對象和該對象對應(yīng)的方法區(qū)中的類型數(shù)據(jù)字柠。

? ? ? ? 直接指針:棧中直接保存對象實例的內(nèi)存地址,對象類型數(shù)據(jù)的指針存儲在對象實例的內(nèi)存區(qū)域中钦幔。

? ? ? ? 采用句柄的方式数冬,可避免在對象移動過程中,頻繁修改棧中該對象的引用铜异。采用直接指針的方式秸架,可快速實現(xiàn)對象的內(nèi)存定位。目前蚂子,HotSpot虛擬機采用的是直接指針的方式。


個人感受

? ? ? ? 以前對虛擬機的認識食茎,都是碎片化的,很多地方都是“只知其然不知其所以然””鹩妫現(xiàn)在成體系地去了解,就能想清楚很多問題了~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喇伯,一起剝皮案震驚了整個濱河市稻据,隨后出現(xiàn)的幾起案子买喧,更是在濱河造成了極大的恐慌,老刑警劉巖秋度,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埠居,居然都是意外死亡,警方通過查閱死者的電腦和手機纸颜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門胁孙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來称鳞,“玉大人,你說我怎么就攤上這事冈止。” “怎么了闺属?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長亚皂。 經(jīng)常有香客問我国瓮,道長,這世上最難降的妖魔是什么厂财? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任璃饱,我火速辦了婚禮肪康,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谒撼。我一直安慰自己廓潜,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布辩蛋。 她就那樣靜靜地躺著悼院,像睡著了一般据途。 火紅的嫁衣襯著肌膚如雪叙甸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天便脊,我揣著相機與錄音遂赠,去河邊找鬼晌杰。 笑死,一個胖子當著我的面吹牛肋演,可吹牛的內(nèi)容都是我干的爹殊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼层玲,長吁一口氣:“原來是場噩夢啊……” “哼辛块!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铅碍,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尘盼,失蹤者是張志新(化名)和其女友劉穎悔叽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爵嗅,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡睹晒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锉试。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡拖云,死狀恐怖应又,靈堂內(nèi)的尸體忽然破棺而出株扛,到底是詐尸還是另有隱情,我是刑警寧澤洞就,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布油昂,位于F島的核電站咖为,受9級特大地震影響秕狰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躁染,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一鸣哀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吞彤,春花似錦我衬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至埋嵌,卻和暖如春破加,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雹嗦。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工范舀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人了罪。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓泊藕,卻偏偏與公主長得像玫锋,于是被迫代替她去往敵國和親臀稚。 傳聞我的和親對象是個殘疾皇子吧寺,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

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