簡(jiǎn)單一文總結(jié)垃圾回收的整個(gè)過(guò)程都是精髓

之前對(duì)垃圾回收的過(guò)程有了解蒋纬,但是還是比較模糊只局限于零碎的知識(shí)點(diǎn)泊愧,整個(gè)流程沒(méi)有串起來(lái)村视,今天有空詳細(xì)了解了一下整個(gè)過(guò)程官套,在此記錄一下。

回收目標(biāo)

  • 主要是堆內(nèi)存垃圾回收
  • 其次也包含方法區(qū)(1.8之后也叫源空間meta)垃圾回收
    下面主要介紹堆內(nèi)存的收集

堆內(nèi)存的劃分

盜取一張圖


image.png
  • 老年代:用來(lái)存儲(chǔ)多次經(jīng)歷過(guò)Minor GC后仍然存活的對(duì)象(包括達(dá)到指定年齡代的對(duì)象以及Monior GC后無(wú)法放入suvivor區(qū)的對(duì)象蚁孔,無(wú)法放入的部分才會(huì)放入老年代)
  • 新生代:用來(lái)存儲(chǔ)程序剛剛分配的對(duì)象奶赔,以及未達(dá)到指定年齡代的對(duì)象

新生代各個(gè)分區(qū)的含義

  • eden:程序運(yùn)行新產(chǎn)生的對(duì)象首先會(huì)進(jìn)入eden區(qū)
  • survivor:survivor有兩部分,可以稱為 s1, s2 杠氢,其中一塊用來(lái)存儲(chǔ)MinorGC后的數(shù)據(jù)站刑,比如開(kāi)始是Eden+s1滿了之后觸發(fā)MinorGC,然后把存活的對(duì)象移入s2區(qū)鼻百,然后程序再往eden+s2區(qū)放入新對(duì)象绞旅,觸發(fā)MinorGC后把存活的對(duì)象放入s1,依次循環(huán)

垃圾回收有哪些

  • MinorGC: 回收新生代的垃圾温艇,不會(huì)暫停用戶線程
  • FullGC:回收整個(gè)堆的垃圾因悲,既包含老年代又包含新生代,會(huì)暫停用戶線程
  • Major GC:回收老年代中的垃圾勺爱,常用的如CMS垃圾回收器晃琳,當(dāng)老年代的空間達(dá)到設(shè)定的閾值時(shí)(-XX:CMSInitiatingOccupancyFraction與-XX:+UseCMSInitiatingOccupancyOnly參數(shù)決定的),垃圾回收器會(huì)收集老年代中的垃圾,避免產(chǎn)生FullGC

從產(chǎn)生垃圾到垃圾回收產(chǎn)生的流程

  1. 程序運(yùn)行產(chǎn)生對(duì)象存放到eden與s1中卫旱,當(dāng)新創(chuàng)建的對(duì)象無(wú)法在eden+s1中找到空間則出發(fā)MinorGC
  2. 如果MinorGC之后存活的對(duì)象小于s2的空間人灼,則放入s2同時(shí)存活對(duì)象的年齡代+1,下次是回收eden+s2顾翼,然后將存活對(duì)象放入到s1
  3. 重復(fù)步驟2投放,如果在某次回收中存活的對(duì)象的年齡代 > MaxTenuringThreshold設(shè)置的值,這部分對(duì)象直接進(jìn)入老年代暴构,剩下的進(jìn)入s1或s2中的一個(gè)
  4. 隨著運(yùn)行跪呈,突然某一次MinorGC后存活的對(duì)象很多段磨,多到整個(gè)s1或者s2區(qū)放不下取逾,這時(shí)候會(huì)盡量往s1或s2中存儲(chǔ),存不下的進(jìn)入到老年代苹支,但是進(jìn)入老年代前會(huì)進(jìn)行一系列條件判斷砾隅,如果老年代可用的連續(xù)空間大于那些需要進(jìn)入到老年代,則直接進(jìn)入债蜜,如果不大于晴埂,那么就需要有以下的處理
  • 在JDK 6 Update 24之后,JVM直接進(jìn)行一次FullGC寻定,HandlePromotionFailure參數(shù)沒(méi)有意義了
  • 在JDK 6 Update 24之前儒洛,如果HandlePromotionFailure 為true,JVM會(huì)再次嘗試進(jìn)行一次MinorGC狼速,但是嘗試是有條件的琅锻,條件就是老年代的連續(xù)空間需要大于歷次MinorGC晉升到老年對(duì)象的平均值,如果小于JVM就會(huì)放棄嘗試直接進(jìn)行FullGC向胡。如果JVM嘗試后還是無(wú)法將多于的對(duì)象放入老年代恼蓬,那么JVM就會(huì)進(jìn)行FullGC;如果HandlePromotionFailure為false僵芹,JVM則直接進(jìn)行FullGC
    據(jù)說(shuō)在JDK 6 Update 24前后的變化是因?yàn)镴VM能夠更為智能的處理老年代晉升失敗這種情況了
  1. 隨著老年代的空間不斷的減少处硬,當(dāng)達(dá)到某個(gè)閾值時(shí),負(fù)責(zé)老年代的垃圾回收器就會(huì)進(jìn)行垃圾回收拇派,比如CMS荷辕,來(lái)降低老年代中的內(nèi)存使用,盡量避免因?yàn)闀x升老年代失敗導(dǎo)致的FullGC件豌。
  2. 以CMS垃圾回收器為例桐腌,CMS在初始標(biāo)記與重新標(biāo)記時(shí)是暫停所有線程的,但是在并發(fā)標(biāo)記與并發(fā)清除時(shí)是與應(yīng)用程序線程一起執(zhí)行的苟径,意味著在并發(fā)清除的過(guò)程中也會(huì)產(chǎn)生對(duì)象案站,隨之產(chǎn)生MinorGC。因此如果在并發(fā)清除階段,如果通過(guò)MinorGC進(jìn)入老年代的對(duì)象大于老年代清理的速度蟆盐,這是就會(huì)產(chǎn)生concurrent mode failure承边,意味著某次MinorGC后需要進(jìn)入到老年代的對(duì)象比老年代最大的可用連續(xù)空間要多,無(wú)法放入老年代石挂,此時(shí)JVM就會(huì)觸發(fā)一次FullGC

以上是從產(chǎn)生對(duì)象到垃圾回收的整個(gè)過(guò)程博助,此過(guò)程沒(méi)有詳細(xì)介紹細(xì)節(jié)中的概念只是注重流程,具體每步驟的涉及的概念以及詳細(xì)過(guò)程并未解決痹愚,可以網(wǎng)站上檢索

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末富岳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拯腮,更是在濱河造成了極大的恐慌窖式,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件动壤,死亡現(xiàn)場(chǎng)離奇詭異萝喘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)琼懊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門阁簸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人哼丈,你說(shuō)我怎么就攤上這事启妹。” “怎么了醉旦?”我有些...
    開(kāi)封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵饶米,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我髓抑,道長(zhǎng)咙崎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任吨拍,我火速辦了婚禮褪猛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羹饰。我一直安慰自己伊滋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布队秩。 她就那樣靜靜地躺著笑旺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪馍资。 梳的紋絲不亂的頭發(fā)上筒主,一...
    開(kāi)封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼乌妙。 笑死使兔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的藤韵。 我是一名探鬼主播虐沥,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼泽艘!你這毒婦竟也來(lái)了欲险?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤匹涮,失蹤者是張志新(化名)和其女友劉穎天试,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體焕盟,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秋秤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年宏粤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脚翘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绍哎,死狀恐怖来农,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情崇堰,我是刑警寧澤沃于,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站海诲,受9級(jí)特大地震影響繁莹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜特幔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一咨演、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚯斯,春花似錦薄风、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至横辆,卻和暖如春撇他,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工困肩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留募疮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓僻弹,卻偏偏與公主長(zhǎng)得像阿浓,于是被迫代替她去往敵國(guó)和親筐钟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氨距,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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