java內(nèi)存模型

談到Java內(nèi)存模型,指的就是運(yùn)行時數(shù)據(jù)區(qū),按照線程是否共享可按圖示劃分

image

1.程序計數(shù)器:可以看作當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器咕村,它是邏輯計數(shù)器场钉,不是物理的,通過改變計數(shù)器的值來選取下一條要執(zhí)行的指令懈涛,每個線程有獨立的計數(shù)器逛万,只為java方法計數(shù),不發(fā)生內(nèi)存泄漏

2.虛擬機(jī)棧:描述的是java方法執(zhí)行時的線程模型批钠,包含了單個線程每個方法執(zhí)行的棧幀宇植,棧幀存儲了局部變量表,操作數(shù)棧埋心,動態(tài)鏈接指郁,方法出口等信息,每一個方法被調(diào)用直至執(zhí)行完畢的過程拷呆,對應(yīng)著一個棧幀在虛擬機(jī)棧中從入棧到出棧的過程

①局部變量表:包含方法執(zhí)行過程中的所有變量
②操作數(shù)棧:負(fù)責(zé)入棧闲坎、出棧等操作

該內(nèi)存規(guī)定了兩種異常:遞歸引發(fā)的StackOverflowError(遞歸過深,棧楨數(shù)超過虛擬棧深度)和虛擬機(jī)棧過多引發(fā)的OutOfMemoryError(當(dāng)虛擬機(jī)椦笕可以動態(tài)擴(kuò)展時箫柳,如果無法申請足夠多的內(nèi)存,就會拋出異常)

3.本地方法棧:與虛擬機(jī)棧發(fā)揮的作用是相似的啥供,區(qū)別只是虛擬機(jī)棧為虛擬機(jī)執(zhí)行java方法服務(wù),本地方法棧為Native(本地方法)服務(wù)

4.Java堆: Java堆是被所有線程共享的一塊內(nèi)存區(qū)域库糠,在虛擬機(jī)啟動時創(chuàng)建伙狐。此內(nèi)存區(qū)域的唯一目的就是存放對象實例,邏輯上連續(xù)瞬欧,物理上可不連續(xù)贷屎,既可以被實現(xiàn)成固定大小的,也可以設(shè)置成可擴(kuò)展的艘虎。當(dāng)類加載器讀取了類文件后唉侄,需要把類、方法野建、常量属划、變量放到堆內(nèi)存中恬叹,保存所有引用類型的真實信息,以方便執(zhí)行器執(zhí)行同眯。

常量池:存放編譯器生成的字面量和符號引用量

JVM三大性能調(diào)優(yōu)參數(shù)-Xms -Xmx -Xss

image

在調(diào)用java指令執(zhí)行程序時绽昼,通過傳入以上三個參數(shù)分別調(diào)整java堆以及線程所占內(nèi)存的大小

5.元空間:存儲的是運(yùn)行環(huán)境必須的類信息,取代永久代须蜗,不在Java虛擬機(jī)的堆中實現(xiàn)硅确,而是使用本機(jī)物理內(nèi)存實現(xiàn)。






補(bǔ)充:在Java8中明肮,永久代已經(jīng)被移除菱农,被一個稱為元空間的區(qū)域所取代。元空間的本質(zhì)和永久代類似柿估。
元空間與永久代之間最大的區(qū)別在于:永久代使用的JVM的堆內(nèi)存(但是邏輯上是非堆的)大莫,但是java8以后的元空間并不在虛擬機(jī)中而是使用本機(jī)物理內(nèi)存(所以在上圖中,我用虛線表示)官份。
永久代:是一個常駐內(nèi)存的區(qū)域只厘,用于存放JDK自身所攜帶的Class,Interface的元數(shù)據(jù)舅巷,即存儲的是運(yùn)行環(huán)境必須的類信息羔味,被轉(zhuǎn)載進(jìn)此區(qū)域的數(shù)據(jù)是不會被垃圾回收的,只有關(guān)閉JVM才會釋放此區(qū)域所占用的內(nèi)存空間钠右。
元空間:取代永久代赋元,不在Java虛擬機(jī)的堆中實現(xiàn),而是使用本機(jī)物理內(nèi)存實現(xiàn)飒房。默認(rèn)情況下元空間大小僅受本地內(nèi)存限制搁凸。類的元數(shù)據(jù)放入native memory,字符串常量在Java堆中(運(yùn)行時常量和基本類型常量在元空間——方法區(qū))
PS:jdk1.8狠毯,jvm把字符串常量池移到了堆內(nèi)存里护糖。此時方法區(qū)=元空間

方法區(qū)(Method Area)并不是所謂的存儲方法的區(qū)域,而是供各線程共享的運(yùn)行時內(nèi)存區(qū)域嚼松。它存儲了已被虛擬機(jī)加載的類信息嫡良、方法信息、字段信息献酗、常量(被final修飾)寝受、靜態(tài)變量、即時編譯器編譯后的代碼緩存等罕偎。

方法區(qū)也是一種規(guī)范很澄,在不同虛擬機(jī)里頭實現(xiàn)是不一樣的,最典型的實現(xiàn)就是HotSpot虛擬機(jī)Java8之前的永久代(PermGen space)和Java8的元空間(Metaspace)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甩苛,一起剝皮案震驚了整個濱河市蹂楣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浪藻,老刑警劉巖捐迫,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異爱葵,居然都是意外死亡施戴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門萌丈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赞哗,“玉大人,你說我怎么就攤上這事辆雾》舅瘢” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵度迂,是天一觀的道長藤乙。 經(jīng)常有香客問我,道長惭墓,這世上最難降的妖魔是什么坛梁? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮腊凶,結(jié)果婚禮上划咐,老公的妹妹穿的比我還像新娘。我一直安慰自己钧萍,他們只是感情好褐缠,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著风瘦,像睡著了一般队魏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弛秋,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天器躏,我揣著相機(jī)與錄音,去河邊找鬼蟹略。 笑死,一個胖子當(dāng)著我的面吹牛遏佣,可吹牛的內(nèi)容都是我干的挖炬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼状婶,長吁一口氣:“原來是場噩夢啊……” “哼意敛!你這毒婦竟也來了馅巷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤草姻,失蹤者是張志新(化名)和其女友劉穎钓猬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撩独,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡敞曹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了综膀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澳迫。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖剧劝,靈堂內(nèi)的尸體忽然破棺而出橄登,到底是詐尸還是另有隱情,我是刑警寧澤讥此,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布拢锹,位于F島的核電站,受9級特大地震影響萄喳,放射性物質(zhì)發(fā)生泄漏卒稳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一取胎、第九天 我趴在偏房一處隱蔽的房頂上張望展哭。 院中可真熱鬧,春花似錦闻蛀、人聲如沸匪傍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽役衡。三九已至,卻和暖如春薪棒,著一層夾襖步出監(jiān)牢的瞬間手蝎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工俐芯, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留棵介,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓吧史,卻偏偏與公主長得像邮辽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

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