面試官:JDK8內(nèi)存分布

內(nèi)存組成部分

根據(jù) JVM 規(guī)范,JVM內(nèi)存共分為虛擬機(jī)棧统捶、堆榆芦、方法區(qū)、程序計(jì)數(shù)器喘鸟、本地方法棧五個(gè)部分匆绣。

image.png

虛擬機(jī)棧

每個(gè)線程都有一私有棧,隨著線程的創(chuàng)建而創(chuàng)建什黑。棧里面會(huì)存放著“棧幀”崎淳,每個(gè)方法創(chuàng)建一個(gè)棧幀。
棧幀的組成部分:
一兑凿、局部變量:存放基本的數(shù)據(jù)類型(byte凯力,charint礼华,double,float,boolean,long,short)和對(duì)象地址引用(一個(gè)指針指向?qū)ο蠡蛘咭粭l指令)。局部變量區(qū)被定義一個(gè)從0開始的數(shù)字?jǐn)?shù)組拗秘,byte圣絮、Charshort雕旨,boolean轉(zhuǎn)換成int扮匠,long ,double, 2個(gè)字節(jié)捧请。其中64 位長(zhǎng)度的longdouble 類型的數(shù)據(jù)會(huì)占用2個(gè)局部變量空間(Slot),其余的數(shù)據(jù)類型只占用1個(gè)棒搜。局部變量通過數(shù)組的下標(biāo)訪問疹蛉。
備注:局部變量表中的Slot是可重用的,方法體中定義的變量力麸,其作用域并不一定會(huì)覆蓋整個(gè)方法可款,如果當(dāng)前字節(jié)碼PC計(jì)算器的值已經(jīng)超出了某個(gè)變量的作用域,那么這個(gè)變量對(duì)應(yīng)的Slot就可以交給其它變量使用克蚂。
二闺鲸、操作數(shù)棧:數(shù)組,先進(jìn)后出埃叭,pushpop操作摸恍。
三、幀數(shù)據(jù)區(qū):
1赤屋、解析常量池的數(shù)據(jù)
2立镶、方法執(zhí)行完后處理方法返回,恢復(fù)調(diào)用方現(xiàn)場(chǎng)
3类早、方法執(zhí)行過程中拋出異常時(shí)異常的處理媚媒,當(dāng)出現(xiàn)異常時(shí)虛擬機(jī)查找相應(yīng)的異常表看是否有對(duì)應(yīng)的catch語句,如果沒有就拋出異常終止這個(gè)方法調(diào)用莺奔。
如果棧內(nèi)存不夠?qū)?huì)拋出StackOverflowError錯(cuò)誤欣范。catch 捕獲的是 Throwable類。
調(diào)整棧內(nèi)存大小參數(shù)-Xss:每個(gè)線程的stack大辛钣础(棧)

虛擬機(jī)堆

堆內(nèi)存是 JVM所有線程共享的部分恼琼,在虛擬機(jī)啟動(dòng)的時(shí)候就已經(jīng)創(chuàng)建。所有的對(duì)象和數(shù)組都在堆上進(jìn)行分配屏富。這部分空間可通過 GC 進(jìn)行回收晴竞。
當(dāng)申請(qǐng)不到空間時(shí)會(huì)拋出 OutOfMemoryErrorcatch捕獲的是 Throwable狠半。
調(diào)整堆參數(shù)大小參數(shù):
XmxJava Heap的最大值噩死、默認(rèn)為物理內(nèi)存的1/4
XmsJava Heap的初始值,server端最好Xms與Xmx一樣
XmnJava Heapyoung區(qū)的大小
XX:MetaspaceSize 元數(shù)據(jù)初始大小
XX:MaxMetaspaceSize 元數(shù)據(jù)內(nèi)存最大值
JDK1.8中神年,取消了PermGen已维,取而代之的是Metaspace
元數(shù)據(jù)空間并不在虛擬機(jī)中已日,而是使用本地內(nèi)存垛耳。

方法區(qū)

方法區(qū)也是所有線程共享。主要用于存儲(chǔ)類的信息、常量池堂鲜、方法數(shù)據(jù)栈雳、方法代碼等。方法區(qū)邏輯上屬于堆的一部分缔莲,但是為了與堆進(jìn)行區(qū)分哥纫,通常又叫“非堆”。

本地方法區(qū)

這部分主要與虛擬機(jī)用到的 Native方法相關(guān)痴奏,一般情況下蛀骇, Java 應(yīng)用程序員并不需要關(guān)心這部分的內(nèi)容。

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

JVM支持多個(gè)線程同時(shí)運(yùn)行抛虫,每個(gè)線程都有自己的程序計(jì)數(shù)器松靡。倘若當(dāng)前執(zhí)行的是 JVM 的方法,則該寄存器中保存當(dāng)前執(zhí)行指令的地址建椰;倘若執(zhí)行的是Native方法雕欺,則程序計(jì)數(shù)器中為空。

舉例

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棉姐,一起剝皮案震驚了整個(gè)濱河市屠列,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伞矩,老刑警劉巖笛洛,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異乃坤,居然都是意外死亡苛让,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門湿诊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狱杰,“玉大人,你說我怎么就攤上這事厅须》禄” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵朗和,是天一觀的道長(zhǎng)错沽。 經(jīng)常有香客問我,道長(zhǎng)眶拉,這世上最難降的妖魔是什么千埃? 我笑而不...
    開封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮忆植,結(jié)果婚禮上镰禾,老公的妹妹穿的比我還像新娘皿曲。我一直安慰自己唱逢,他們只是感情好吴侦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坞古,像睡著了一般备韧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痪枫,一...
    開封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天织堂,我揣著相機(jī)與錄音,去河邊找鬼奶陈。 笑死易阳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吃粒。 我是一名探鬼主播潦俺,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼徐勃!你這毒婦竟也來了事示?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤僻肖,失蹤者是張志新(化名)和其女友劉穎肖爵,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臀脏,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劝堪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了揉稚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秒啦。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窃植,靈堂內(nèi)的尸體忽然破棺而出帝蒿,到底是詐尸還是另有隱情,我是刑警寧澤巷怜,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布葛超,位于F島的核電站,受9級(jí)特大地震影響延塑,放射性物質(zhì)發(fā)生泄漏绣张。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一关带、第九天 我趴在偏房一處隱蔽的房頂上張望侥涵。 院中可真熱鬧沼撕,春花似錦、人聲如沸芜飘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗦明。三九已至笼沥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娶牌,已是汗流浹背奔浅。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诗良,地道東北人汹桦。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鉴裹,于是被迫代替她去往敵國(guó)和親舞骆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,092評(píng)論 1 32
  • 第二部分 自動(dòng)內(nèi)存管理機(jī)制 第二章 java內(nèi)存異常與內(nèi)存溢出異常 運(yùn)行數(shù)據(jù)區(qū)域 程序計(jì)數(shù)器:當(dāng)前線程所執(zhí)行的字節(jié)...
    小明oh閱讀 1,138評(píng)論 0 2
  • 第一步壹罚,了解JVM基本概念葛作,基本結(jié)構(gòu)。 第二步猖凛,了解JVM中線程私有區(qū)和公有區(qū)赂蠢。 第三步,了解線程與Java內(nèi)存模...
    Arya鑫閱讀 1,191評(píng)論 0 10
  • 文章轉(zhuǎn)自 http://blog.csdn.net/u012152619/article/details/4696...
    云狗狗狗狗狗閱讀 602評(píng)論 1 4
  • Java內(nèi)存區(qū)域 Java虛擬機(jī)在運(yùn)行程序時(shí)會(huì)把其自動(dòng)管理的內(nèi)存劃分為以上幾個(gè)區(qū)域辨泳,每個(gè)區(qū)域都有的用途以及創(chuàng)建銷毀...
    架構(gòu)師springboot閱讀 1,766評(píng)論 0 5