GC

對(duì)象是否存活的算法:
  1. 引用計(jì)數(shù)法:無法解決循環(huán)引用的問題。
  2. 可達(dá)性分析法:GCRoots 可達(dá)。
GCRoots對(duì)象:
虛擬機(jī)棧中的引用對(duì)象
方法去靜態(tài)變量
方法區(qū)中的常量
本地方法(JNI)棧中的引用對(duì)象
垃圾回收算法:
  1. 標(biāo)記清理:根據(jù)可達(dá)性分析,標(biāo)記不再引用的對(duì)象(標(biāo)記過程會(huì)stop the world),然后再進(jìn)行清除操作??臻g碎片的問題。
  2. 復(fù)制算法:一般用于年輕代,數(shù)據(jù)較小的區(qū)域。存活率較高時(shí),需要進(jìn)行較多的復(fù)制操作;還有空間浪費(fèi)等問題。
  3. 標(biāo)記整理:標(biāo)記,然后整理對(duì)齊,處理空間碎片的問題,存活對(duì)象都移動(dòng)向一端,然后直接清理掉端邊界意外的內(nèi)存。
  4. 分代手機(jī)算法:年輕代使用復(fù)制算法;老年代使用標(biāo)記清理或標(biāo)記整理
堆的分代
  1. 年輕代:年輕代又分為一個(gè) Eden區(qū)和兩個(gè)Survivor區(qū)
  2. 老年代
垃圾回收的整個(gè)過程:
  1. 如果設(shè)置了 -XX:MaxTenuringThreshold, 會(huì)先判斷對(duì)象是否大于該值,大于就直接放到老年代。
  2. 看 Eden 區(qū)是否能放下,能放下直接放Eden區(qū);
  3. Eden 區(qū)放不下會(huì)觸發(fā)一 YoungGC(MinorGC),存活的對(duì)象會(huì)被放到 survivor 的 to 區(qū),對(duì)象頭中的 age 加 1,MinorGC還同時(shí)會(huì)對(duì) from 區(qū)的對(duì)象進(jìn)行標(biāo)記,存活對(duì)象 age 等于 15 的會(huì)被移動(dòng)到老年代,存活且年齡小于15的會(huì)被放到 to 區(qū),age加 1;此時(shí) from 區(qū)所有對(duì)象都被轉(zhuǎn)移,清空 from 區(qū),然后 from 和 to 區(qū)域互換。
  4. 對(duì)象放到老年代,若空間不足會(huì)觸發(fā) FullGC
  5. 分配擔(dān)保,在進(jìn)行 MinorGC 前會(huì)先比較當(dāng)前年輕代對(duì)象總大小是否小于當(dāng)前老年代最大可用連續(xù)空間大小,若小于會(huì)認(rèn)為此次 MinorGC 為安全的;若大于,會(huì)認(rèn)為 MinorGC 有一定風(fēng)險(xiǎn),此時(shí)會(huì)比較老年代最大可用連續(xù)空間是否大于歷次晉升到老年代對(duì)象的平均大小,若大于,會(huì)嘗試進(jìn)行一次 MinorGC,若小于改為進(jìn)行一次 FullGC。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JVM內(nèi)存管理 根據(jù)JVM規(guī)范,JVM把內(nèi)存劃分成了如下幾個(gè)區(qū)域: 方法區(qū)(Method Area) 堆區(qū)(Hea...
    Android_馮星閱讀 786評(píng)論 0 5
  • GC與內(nèi)存分配策略 1 概述 說起垃圾回收機(jī)制,大部分人都把這項(xiàng)技術(shù)當(dāng)做java語言的伴生產(chǎn)物。事實(shí)上,gc的歷史...
    勾小超愛吃面閱讀 910評(píng)論 0 2
  • 前言 開設(shè)JVM系列以后,就一直打算寫寫GC這塊的事情??傮w上來說這塊也算是比較偏理論,很多時(shí)候是看的時(shí)候理解了,...
    耐得千事煩閱讀 720評(píng)論 1 2
  • 這次來說一下關(guān)于Java垃圾收集的一些思想和算法。 垃圾收集的觸發(fā)條件 1)因?yàn)镚C線程的優(yōu)先級(jí)較低,所以當(dāng)虛擬機(jī)...
    nemuni閱讀 733評(píng)論 3 1
  • 一、Java垃圾回收概況 概括地說,該機(jī)制對(duì) JVM(Java Virtual Machine)中的內(nèi)存進(jìn)行標(biāo)記,...
    極客天空閱讀 493評(píng)論 0 1

友情鏈接更多精彩內(nèi)容