最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Java虛擬機-垃圾回收器

2020-10-10 11:37 作者:bili_93709487  | 我要投稿

新生代垃圾收集器:Serial、ParNew、Parallel Scavenge

老年代收集器:CMS、Serial Old、Parallel Old

新生代和老年代都能回收的收集器:G1

Serial收集器

Serial收集器是一個單線程工作的收集器,在它進行垃圾回收工作時,必須暫停其他所有工作線程(Stop The World),直到收集結(jié)束。

  • 對于內(nèi)存資源受限的環(huán)境,Serial是所有收集器中消耗額外內(nèi)存最小的。

  • 單核處理器或者處理器核心較少的環(huán)境,Serial由于沒有線程交互的開銷,可以獲得最高的單線程收集效率。

ParNew收集器

ParNew收集器實質(zhì)上是Serial收集器的多線程版本,ParNew的多線程指的是垃圾回收時進行多線程的回收,并不能和用戶線程一起工作,依然需要Stop The World。

Parallel Scavenge收集器

Parallel Scavenge是基于“標記-整理算法”實現(xiàn)的垃圾收集器,也能夠進行并行收集的多線程收集器。

Parallel Scavenge收集器關(guān)注的是達到一個可以控制的吞吐量。

吞吐量=運行用戶代碼時間 /(運行用戶代碼時間+運行垃圾收集的時間)


Serial Old收集器

Serial Old收集器是Serial的老年代版本,它同樣是一個單線程收集器,使用“標記-整理算法”

在服務(wù)端模式下,他的兩個用途:

  • 在Jdk5版本之前中Serial Old和Parallel Scavenge配合使用。

  • 在CMS收集器發(fā)生失敗后(并發(fā)收集出現(xiàn)Concurrent Mode Failure時)使用。

Parallel Old收集器

Parallel Old收集器時Parallel Scavenge的老年代版本,支持多線程并發(fā)收集,基于“標記-整理算法”實現(xiàn)

CMS(Concurrent Mark Sweep)收集器

CMS收集器以獲取最短停頓時間為目標,是基于“標記-清除”算法實現(xiàn)的。收集過程分為四個步驟:

  • 初始標記:需要暫停用戶進程,工作是標記GC Roots能直接關(guān)聯(lián)的對象。

  • 并發(fā)標記:從GC Roots直接關(guān)聯(lián)的對象開始遍歷對象圖。(與用戶進程并發(fā)運行)

  • 重新標記:需要暫停用戶進程,為了修正并發(fā)標記期間,用戶程序運行導致標記產(chǎn)生變動的對象的標記記錄。

  • 并發(fā)清除:清理掉被標記階段判斷已經(jīng)“死亡”的對象。(與用戶進程并發(fā)運行)

CMS收集器的缺點:

  • 面向并發(fā)設(shè)計的程序都對處理器資源比較敏感。在并發(fā)階段CMS雖然不會導致用戶進程停頓,但是會消耗一部分線程資源,導致應用程序變慢,吞吐量降低。

  • CMS收集器無法處理“浮動垃圾”,有可能會出現(xiàn)“Concurrent Mode Failure”而導致“Full GC”的發(fā)生。

  • CMS是一款基于“標記-清除算法”的收集器,收集結(jié)束會產(chǎn)生大量的空間碎片。在空間碎片過多時,會對大對象分配帶來很大的麻煩,無法分配足夠大的連續(xù)空間時,不得不提前觸發(fā)“Full GC”

浮動垃圾是指CMS收集器在并發(fā)標記和清除階段,用戶程序產(chǎn)生的垃圾,CMS收集器無法在當次垃圾收集中處理掉它們。

G1(Garbage First)收集器

G1收集器開創(chuàng)了收集器面向局部收集的思路和基于Region的內(nèi)存布局。

Region中還有一類特殊的Humongous區(qū)域,專門用來存放大對象(大小超過Region的一半)。

G1仍然保留了新生代和老年代的概念,但是新生代和老年代不是固定的,它們都是一系列區(qū)域的動態(tài)集合。

G1可以面對堆內(nèi)存中的任何部分進行回收,衡量保準不是內(nèi)存屬于哪一個分代,而是哪塊內(nèi)存中存放的垃圾最多,回收收益最大,這就是G1的Mixed GC模式。

G1收集器的運作過程:

  • 初始標記:標記GC Roots能直接關(guān)聯(lián)到的對象,并修改TAMS指針的值,讓下一階段用戶進程并發(fā)運行時能在可用的Region中分配對象。

  • 并發(fā)標記:從GC Roots直接關(guān)聯(lián)的對象開始,對堆中對象進行可達性分析,找出要回收的對象。

  • 最終標記:暫停用戶線程,處理并發(fā)階段結(jié)束后仍然遺留下來的最后少量的SATB記錄。

  • 篩選回收:負責更新Region的統(tǒng)計數(shù)據(jù),對Region的回收價值和成本進行排序,根據(jù)用戶期望停頓時間來制定回收計劃,把存活的對象復制到空Region中,然后清空這個舊Region。

與CMS比較:

  • G1從整體角度上看是使用的“標記-整理算法”,從Region的角度看使用的是“標記-復制算法”。不會產(chǎn)生空間碎片。

  • G1為了垃圾收集產(chǎn)生的垃圾占用和程序運行時的額外負載都比CMS高。


Java虛擬機-垃圾回收器的評論 (共 條)

分享到微博請遵守國家法律
鞍山市| 五家渠市| 广西| 迭部县| 正镶白旗| 安图县| 石台县| 南宫市| 奉节县| 怀化市| 辉县市| 佳木斯市| 宣城市| 松滋市| 麟游县| 屯昌县| 海门市| 台南县| 恩施市| 东兰县| 宁海县| 潜山县| 黔南| 兴宁市| 深州市| 黑龙江省| 大同县| 寻乌县| 定结县| 广水市| 梁河县| 聊城市| 九台市| 浠水县| 孟村| 涿州市| 中江县| 阿鲁科尔沁旗| 邹平县| 曲麻莱县| 贵定县|