JVM基礎(chǔ)和內(nèi)存區(qū)域剖析

一、JVM的種類

  • Sun Classic VM

  • Exact VM(EMM 準(zhǔn)確式)

  • HotSpot VM

  • JVM(Kilobyte)

  • JRockit

    • 號(hào)稱世界上最快的JVM

    • JIT即時(shí)編譯

    • JVM處于世界一流水平

  • J9

  • Azui VM

  • Liquid VM

  • Dalvik VM

  • Microsoft VM

二、JVM的結(jié)構(gòu)

  • 類加載子系統(tǒng)

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

  • 執(zhí)行引擎

  • 本地方法接口

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

  • 線程共享

    • 方法區(qū)

  • 線程私有

    • 虛擬機(jī)棧

    • 本地方法棧

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

image-20200702025222874.png

程序計(jì)數(shù)器(線程私有)

概念

一塊較小的內(nèi)存空間芙委,當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器,包括分支萧福、循環(huán)伊群、跳轉(zhuǎn)洛口、異常處理稚照、線程恢復(fù)等

特點(diǎn)

1.線程輪流切換CPU時(shí)間片后重新回到指令處理位置逞壁,故是線程私有的

2.唯一一個(gè)在Java虛擬機(jī)中不會(huì)出現(xiàn)OutOfMemeryError的區(qū)域

注:因?yàn)樗皇钱?dāng)前線程執(zhí)行的字節(jié)碼的行號(hào)指示器

3.若線程執(zhí)行的是Java方法,計(jì)數(shù)器記錄的是正在執(zhí)行的VM字節(jié)碼指令地址锐锣,若執(zhí)行的是Native方法,則計(jì)數(shù)器為空

4.與線程一起存在

虛擬機(jī)棧

先進(jìn)后出

虛擬機(jī)棧:用戶描述Java方法執(zhí)行的內(nèi)存模型

  • 調(diào)整參數(shù):-Xss<size>

棧幀:虛擬機(jī)棧中的棧元素(用于支持虛擬機(jī)進(jìn)行方法調(diào)用和方法執(zhí)行的數(shù)據(jù)結(jié)構(gòu))包括局部變量表绳瘟、操作數(shù)棧雕憔、動(dòng)態(tài)鏈接、方法出口

  • 局部變量表:存放方法參數(shù)和方法內(nèi)的局部變量

  • 操作數(shù)棧:虛擬機(jī)的工作區(qū)(大多數(shù)指令都是從這里彈出數(shù)據(jù)糖声,執(zhí)行運(yùn)算斤彼,然后把結(jié)果壓會(huì)操作數(shù)棧)

  • 動(dòng)態(tài)連接:符號(hào)引用和直接引用在運(yùn)行時(shí)進(jìn)行解析和鏈接的過程,叫動(dòng)態(tài)鏈接

  • 方法返回:程序正常完成出口和異常完成出口

image-20200702030821996.png

方法區(qū)(線程共享)[非堆-Non-Heap]

JDK1.8前后變化蘸泻,JDK8取消了方法區(qū)琉苇,增加了元空間

image-20200702031716627.png

1.主要存儲(chǔ):

  • 類信息

  • 常量

  • 靜態(tài)變量

  • 即時(shí)編譯器編譯信息

2.數(shù)據(jù)過多會(huì)導(dǎo)致OutOfMemoryError異常

< JDK 1.8

  • -XX:Permsize; -XX:MaxPermSize

>=JDK1.8

  • -XX:MeteSpaceSize; -XX:MaxMateSpaceSize

和永久代的區(qū)別:

1.存儲(chǔ)位置不同,永久代物理上是堆的一部分悦施,和新手代并扇,老年代地址是連續(xù)的,而元空間屬于本地內(nèi)存抡诞;

2.存儲(chǔ)內(nèi)容不同穷蛹,元空間存儲(chǔ)類的元信息,靜態(tài)變量和常量池等并入堆中;

3.相當(dāng)于永久代的數(shù)據(jù)被分到了堆和元空間中

直接內(nèi)存:避免native空間和java堆中來回進(jìn)行復(fù)制

  • 通過設(shè)置-XX:MaxDirectMemorySize限制大小

堆(線程共享)

image-20200702033412543.png

虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建昼汗,用于存放對(duì)象實(shí)例肴熏,幾乎所有的對(duì)象(包含常量池)都在堆上分配內(nèi)存,當(dāng)對(duì)象無法再該空間申請(qǐng)到內(nèi)存時(shí)將拋出OutOfMemoryError異常顷窒。同時(shí)也是垃圾收集器管理的主要區(qū)域蛙吏。可通過 -Xmx –Xms 參數(shù)來分別指定最大堆和最小堆

GC主要管理區(qū)域,可以通過-Xmx和Xms來設(shè)置最大和最小值鸦做,也可以通過-XX:NewSize -XX:MaxNewSize設(shè)置年輕代初始大小

超出空間大小會(huì)拋出OutOfMemoryError異常

新生區(qū)

新生區(qū)分為兩個(gè)部分:伊甸區(qū)(Eden space)和幸存者區(qū)(survivor space)

伊甸區(qū)(Eden space)

大部分對(duì)象都會(huì)在Eden區(qū)誕生励烦,并且一段時(shí)間不使用就會(huì)被GC回收

幸存者區(qū)(survivor space)

存在一段時(shí)間還在使用的對(duì)象會(huì)進(jìn)入survivor區(qū),survivor區(qū)包含一個(gè)相對(duì)的From區(qū)和to區(qū)馁龟,兩者來回copy崩侠,回收沒用的對(duì)象,用來延長(zhǎng)對(duì)象的生命周期坷檩。

老年區(qū)(old FullGC)

經(jīng)過多次GC仍然存在的對(duì)象會(huì)移動(dòng)到老年區(qū)中却音,若老年區(qū)也滿了,則會(huì)產(chǎn)生MajorGC(Full GC)矢炼,對(duì)老年區(qū)進(jìn)行內(nèi)存清理(STW)系瓢,若老年區(qū)執(zhí)行了Full GC之后發(fā)現(xiàn)還是無法進(jìn)行對(duì)象的報(bào)錯(cuò),那么就會(huì)產(chǎn)生OOM異尘涔啵”O(jiān)utOfMemoryError“

虛擬機(jī)棧(線程私有)[VM Stack]

四夷陋、內(nèi)存模型與回收策略

垃圾回收算法

1.標(biāo)記-清除(Mark-Sweep)

問題:空間不連續(xù),浪費(fèi)空間


image-20200702035209179.png

復(fù)制(copying)

復(fù)制算法有2塊一樣大小的空間胰锌,情況對(duì)象時(shí)將可用的對(duì)象移動(dòng)到to區(qū)里骗绕,復(fù)制算法內(nèi)存空間連續(xù)

問題:要用2塊空間,所以內(nèi)存的模型from和to非常的小

image-20200702035446036.png

標(biāo)記整理

只用一塊空間资昧,先進(jìn)行標(biāo)記無用對(duì)象酬土,然后整理內(nèi)存空間地址,最后清除

image-20200702035633349.png

五格带、垃圾收集器類型

串行搜集器(serial collector)

它只有一條GC線程撤缴,且就像前面說的,它在運(yùn)行的時(shí)候需要暫停用戶程序(stop the world)STW

并行搜集器(parallel collector)

它有多條GC線程叽唱,且它也需要暫停用戶程序(stop the world)STW

并發(fā)搜集器(concurrent collector)

它有一條或多條GC線程屈呕,且它需要在部分階段暫停用戶程序(stop the world),部分階段與用戶程序并發(fā)執(zhí)行

六棺亭、HotSpot中的垃圾收集器

串行搜集器的實(shí)現(xiàn)

serial(用于新生代虎眨,采用復(fù)制算法)、serial old(用于年老代侦铜,采用標(biāo)記/整理算法)

并行收集器的實(shí)現(xiàn)

parNew(用于新生代专甩,采用復(fù)制算法)、Parallel

Scavenge(用于新生代钉稍,采用復(fù)制算法)涤躲、Parallel

old(用于年老代,采用標(biāo)記/整理算法)

并發(fā)搜集器的實(shí)現(xiàn)

concurrent mark sweep[CMS] (用于年老代贡未,采用標(biāo)記/清除算法)

七种樱、收集器組合策略

image-20200702041102010.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒙袍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嫩挤,更是在濱河造成了極大的恐慌害幅,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岂昭,死亡現(xiàn)場(chǎng)離奇詭異以现,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)约啊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門邑遏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恰矩,你說我怎么就攤上這事记盒。” “怎么了外傅?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵纪吮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我萎胰,道長(zhǎng)碾盟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任技竟,我火速辦了婚禮巷疼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灵奖。我一直安慰自己,他們只是感情好估盘,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布瓷患。 她就那樣靜靜地躺著,像睡著了一般遣妥。 火紅的嫁衣襯著肌膚如雪擅编。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天箫踩,我揣著相機(jī)與錄音爱态,去河邊找鬼。 笑死境钟,一個(gè)胖子當(dāng)著我的面吹牛锦担,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慨削,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼洞渔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼套媚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起磁椒,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤堤瘤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后浆熔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體本辐,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年医增,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慎皱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡调窍,死狀恐怖宝冕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邓萨,我是刑警寧澤地梨,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站缔恳,受9級(jí)特大地震影響宝剖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歉甚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一万细、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纸泄,春花似錦赖钞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衡便,卻和暖如春献起,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镣陕。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工谴餐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呆抑。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓岂嗓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鹊碍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摄闸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360