溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JVM垃圾回收算法和垃圾回收器是什么?

發(fā)布時(shí)間:2020-05-26 16:26:37 來(lái)源:億速云 閱讀:259 作者:鴿子 欄目:軟件技術(shù)

垃圾回收算法

  1. 復(fù)制算法(Copying)
  2. 標(biāo)記-清除算法(Mark-Sweep)
  3. 標(biāo)記-整理算法(Mark-Compact)
    復(fù)制算法:
    優(yōu)點(diǎn),效率高,不會(huì)出現(xiàn)內(nèi)存碎片,
    缺點(diǎn),內(nèi)存利用率低,只能用一半,存活對(duì)象較多時(shí)效率明顯下降
    Eden  from to 8:1:1,java中大部分對(duì)象朝生夕死,所以只有10%的對(duì)象需要回收,10%(from)+ 10%(to,預(yù)留)
    JVM垃圾回收算法和垃圾回收器是什么?
    標(biāo)記清除算法:
    優(yōu)點(diǎn):空間利用率100%
    缺點(diǎn):標(biāo)記和清除效率都不高,會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片
    過(guò)程:1.首先標(biāo)記所有需要回收的對(duì)象 2.統(tǒng)一回收被標(biāo)記的對(duì)象
    JVM垃圾回收算法和垃圾回收器是什么?
    標(biāo)記整理算法:
    優(yōu)點(diǎn):利用率100%,沒(méi)有內(nèi)存碎片
    缺點(diǎn):標(biāo)記和清除效率都不高,效率相對(duì)標(biāo)記-清除要低
    過(guò)程:標(biāo)記后不直接進(jìn)行清理,而是把存活對(duì)象向一端移動(dòng),然后清理端邊界外的內(nèi)存。
    JVM垃圾回收算法和垃圾回收器是什么?

    垃圾回收器

    分代算法:根據(jù)各個(gè)年代特點(diǎn)選用不用垃圾回收算法
    新生代:采用復(fù)制算法
    老年代:使用標(biāo)記-整理或標(biāo)記-清除算法
    JVM垃圾回收算法和垃圾回收器是什么?
    并行:垃圾收集的多線程同時(shí)進(jìn)行
    并發(fā):垃圾收集的多線程和應(yīng)用的多線程同時(shí)進(jìn)行

回收器
1,Seral/Serial Old : 單線程
2,ParNew: 和Seral基本沒(méi)區(qū)別,多線程
3,Parallel Scavenge(ParallerGC)/Parallel Old : 關(guān)注吞吐量的收集器,主要用于后臺(tái)運(yùn)算而不需要太多交互的任務(wù)。
4,CMS:一種最短停頓時(shí)間的收集器。使用標(biāo)記清除算法
5,G1:jdk1.9以后推薦使用,跨越的新生代和老年代。使用標(biāo)記整理和化整為零
所有新生代都是用復(fù)制算法,老年代 標(biāo)記整理和標(biāo)記清除

Concurrent MarkSweep(CMS):

-XX:+UseConcMarkSweepGC,應(yīng)用于B/S系統(tǒng)服務(wù)器,重視服務(wù)的響應(yīng)速度,希望系統(tǒng)停頓時(shí)間最短,給用戶較好的體驗(yàn)。
垃圾回收過(guò)程

  1. 初始標(biāo)記:僅標(biāo)記GC Roots直接關(guān)聯(lián)的對(duì)象,速度快,需要停頓
  2. 并發(fā)標(biāo)記:從GC Roots對(duì)象進(jìn)行可達(dá)性分析,找到存活對(duì)象,耗時(shí)最長(zhǎng),不需要停頓
  3. 重新標(biāo)記:修改并發(fā)標(biāo)記期間因程序繼續(xù)運(yùn)作導(dǎo)致標(biāo)記變動(dòng)那一部分,需要停頓(STW),這個(gè)停頓會(huì)比初始標(biāo)記長(zhǎng)一些,但比并發(fā)標(biāo)記時(shí)間短
  4. 并發(fā)清除:不需要停頓
    JVM垃圾回收算法和垃圾回收器是什么?
    優(yōu)點(diǎn):耗時(shí)最長(zhǎng)的并發(fā)標(biāo)記和并發(fā)清除可以與用戶線程一起工作。
    缺點(diǎn)
    1,CPU資源敏感:并發(fā)暫用CPU資源,CPU不足,效率明顯降低。
    2,浮動(dòng)垃圾:并發(fā)清理階段,由于用戶線程繼續(xù)運(yùn)行產(chǎn)生的垃圾,CMS無(wú)法處理,需等待下一次GC處理,這部分成為“浮動(dòng)垃圾”
    3,會(huì)產(chǎn)生空間碎片:標(biāo)記-清理算法會(huì)產(chǎn)生不連續(xù)的空間碎片

    G1垃圾收集器

    -XX:+UseG1GC
    內(nèi)部布局改變
    G1把堆劃分多個(gè)大小相等的獨(dú)立區(qū)域(Region),新生代和老年代不再物理隔離。
    算法:標(biāo)記-整理(humongous)和復(fù)制回收算法(survivor)。
    JVM垃圾回收算法和垃圾回收器是什么?
    GC模式
    Young GC(回收Eden、Survivor區(qū)):選定所有年輕代的Region,通過(guò)控制年輕代個(gè)數(shù),來(lái)控制young GC 的時(shí)間開(kāi)銷(xiāo)(復(fù)制回收算法)
    Mixed GC(全部區(qū)域回收):不但選定年輕代Region還要選定老年代收益高的若干Region,進(jìn)行釋放。Mixed GC 不是Full GC,如果Mixed GC 跟不上程序分配內(nèi)存速度,就會(huì)使用serial odl GC(Full GC)來(lái)收集整個(gè)GC heap。4G1不是Full GC。
    全局并發(fā)標(biāo)記
    1, 初始標(biāo)記:僅僅標(biāo)記一下GC Roots能直接關(guān)聯(lián)的對(duì)象,此階段需要停頓線程(STW),但耗時(shí)很短。
    2, 并發(fā)標(biāo)記:從GC Roots開(kāi)始對(duì)堆進(jìn)行可達(dá)性分析,找到活對(duì)象,耗時(shí)很長(zhǎng),但與用戶程序并行
    3,最終標(biāo)記:為了修正并發(fā)標(biāo)記階段因用戶程序繼續(xù)而導(dǎo)致標(biāo)記產(chǎn)生變動(dòng)的那一部分標(biāo)記記錄。需要停頓線程(STW),但是可并行執(zhí)行。
    4,篩選回收:首先對(duì)各個(gè)Region中的回收價(jià)值和成本進(jìn)行排序,根據(jù)用戶所期望的GC停頓時(shí)間來(lái)指定回收計(jì)劃。此階段與用戶并行一起并行執(zhí)行,但是因?yàn)榛厥找徊糠諶egion,時(shí)間是用戶可控的,而且停頓用戶線程能大幅度提交收集效率。
    JVM垃圾回收算法和垃圾回收器是什么?
    特點(diǎn)
    1, 空間整理:不會(huì)產(chǎn)生內(nèi)存碎片。算法為標(biāo)記-整理和復(fù)制回收算法。
    2, 可預(yù)測(cè)的停頓:G1,刷選不是經(jīng)常使用,而是刷選那些回收效率比較高的區(qū)域(回收回報(bào)比比較高)??偣?000個(gè)區(qū)域,一個(gè)區(qū)域10m * 篩選常用的100個(gè)區(qū)域  急需回收。

Stop The World
GC收集器和GC優(yōu)化的目標(biāo)就是盡可能的減少STW的時(shí)間和次數(shù)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI