目錄
1.垃圾判斷
1.1 引用計數(shù)法:
1.2 可達性分析:
1.3 常見的GC Roots有:
2.垃圾回收方式:垃圾收集器
2.1 CMS收集器:
2.2 G1收集器:
1.垃圾判斷
1.1 引用計數(shù)法:
????????對象有一個引用計數(shù)器,引用一次計數(shù)器就加1,計數(shù)器為0就是沒有引用,但存在循環(huán)引用問題
1.2 可達性分析:
????????以GC Roots為起點向下搜索,經(jīng)過的路徑叫做引用鏈,若對象和GC Roots之間沒有任意一條引用鏈,則說明不可達,兩次不可達則可以回收
1.3 常見的GC Roots有:
虛擬機棧中引用的對象;本地方法棧中引用的對象;被同步鎖持有的對象;方法區(qū)中靜態(tài)屬性引用的對象
2.垃圾回收方式:垃圾收集器
Serial收集器:單線程,新生代,標記復制算法
ParallelNew 收集器:多線程,新生代,標記復制算法
ParallelScavenge收集器:多線程,新生代,標記復制算法;專注于吞吐量,CPU的高利用率
Serial Old收集器:單線程,老年代,標記整理算法
Parallel Old收集器:多線程,老年代,標記整理算法
CMS收集器:并發(fā)標記清除,專注于最短停頓時間,實現(xiàn)用戶線程和垃圾收集線程并發(fā)工作
G1收集器(默認):在后臺維護了一個優(yōu)先列表,優(yōu)先回收高優(yōu)先級的區(qū)域
2.1 CMS收集器:
過程:四個步驟
-
初始標記:標記GC Roots能直接關(guān)聯(lián)到的對象,速度很快
-
并發(fā)標記:從GC Roots的直接關(guān)聯(lián)對象開始遍歷所有對象,此時用戶線程可以和垃圾收集線程并發(fā)運行
-
重新標記:是為了修正并發(fā)標記期間因為用戶程序運行而導致標記產(chǎn)生變動的對象的標記記錄
-
并發(fā)清除:對未標記的區(qū)域進行清除,此時能夠與用戶線程并發(fā)執(zhí)行
優(yōu)點:能夠并發(fā)收集,減少用戶等待時間
缺點:標記清除算法導致的空間碎片;對CPU資源敏感;無法處理浮動垃圾(并發(fā)清除階段,用戶線程運行也會產(chǎn)生新的垃圾對象,此時只能在下一次垃圾回收時處理)
2.2 G1收集器:
過程:四個步驟
-
初始標記:標記GC Roots能直接關(guān)聯(lián)到的對象,并修改TAMS指針的指
-
并發(fā)標記:從GC Roots的開始對堆中對象進行可達性分析,遞歸掃描堆中的對象圖,找出要回收的對象
-
最終標記:暫停用戶線程,用于處理并發(fā)階段結(jié)束后遺留的少量SATB記錄
-
篩選回收:更新Region統(tǒng)計數(shù)據(jù),對各個Region的回收價值和成本排序,根據(jù)用戶期望的停頓時間制定回收計劃,將回收的一部分區(qū)域的存活對象復制到一個空區(qū)域中,清理到整個舊區(qū)域全部空間;此時暫停用戶線程,多條垃圾回收線程并行執(zhí)行
優(yōu)點:不會產(chǎn)生內(nèi)存碎片;能夠指定最大停頓時間;分區(qū)域的內(nèi)存布局文章來源:http://www.zghlxwxcb.cn/news/detail-672955.html
缺點:占用額外的內(nèi)存空間(每個Region維護一個優(yōu)先列表)文章來源地址http://www.zghlxwxcb.cn/news/detail-672955.html
到了這里,關(guān)于垃圾收集器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!