日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gc垃圾收集器 与gc算法_GC解释:收集器概述

發(fā)布時(shí)間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gc垃圾收集器 与gc算法_GC解释:收集器概述 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

gc垃圾收集器 與gc算法

當(dāng)前版本的HotSpot JVM包括三種類型的垃圾收集器:

–串行收集器

–并行收集器

–多數(shù)同時(shí)收集者

它們都是世代的,這意味著它們利用了堆的劃分方式 。

垃圾收集器負(fù)責(zé)三個(gè)主要操作:

–查找不再使用的對象

–釋放這些對象之后的內(nèi)存

–壓縮堆

并非所有收集器都以相同的方式執(zhí)行這些操作,因此讓我們了解有關(guān)所有收集器的基本信息。 我們將在單獨(dú)的文章中介紹細(xì)節(jié)。

串行收集器

顧名思義,收集僅由一個(gè)線程執(zhí)行。 在次要和完全GC期間都必須停止世界(STW)。

該收集器對年輕一代使用標(biāo)記復(fù)制算法,而對舊一代使用標(biāo)記清除緊湊算法進(jìn)行清理。

串行GC專為單線程環(huán)境(通常是客戶端類計(jì)算機(jī))和較小的堆而設(shè)計(jì)。 可以通過-XX:+UseSerialGC標(biāo)志啟用它。

并行(吞吐量)收集器

Young集合由多個(gè)線程并行化,這使Minor GC更快。 結(jié)果,該收集器導(dǎo)致較短但更頻繁的Young收集STW暫停。 從JDK 7u4開始,默認(rèn)情況下還會(huì)由多個(gè)線程收集“舊世代”(并且還會(huì)導(dǎo)致世界停頓)。 在JDK 7u4之前,需要-XX:+UseParallelOldGC標(biāo)志來啟用舊一代的并行處理。 現(xiàn)在, -XX:+UseParallelGC和-XX:+UseParallelOldGC標(biāo)志都啟用了吞吐量收集器,并同時(shí)處理了老一代和年輕一代。

該收集器還在Young Generation中使用mark-copy算法,在Old Generation中使用mark-sweep-compact,但是復(fù)制和壓縮階段均由多個(gè)線程執(zhí)行。

要配置GC線程數(shù),可以使用-XX:ParallelGCThreads=X標(biāo)志。 默認(rèn)值設(shè)置為CPU內(nèi)核數(shù)。

什么時(shí)候使用并行GC是個(gè)好選擇? 好吧,基本上,只要吞吐量比延遲更重要。

多數(shù)同時(shí)收集者

它們被稱為低暫停收集器-旨在最大程度地減少停頓的暫停并保持應(yīng)用程序盡可能的響應(yīng)

并發(fā)標(biāo)記和掃描(CMS)

使用并行標(biāo)記復(fù)制算法在多個(gè)線程中執(zhí)行次要GC。 然后將停止所有應(yīng)用程序線程。 老式服務(wù)器通常是同時(shí)收集的-當(dāng)后臺GC線程掃描老式服務(wù)器時(shí),應(yīng)用程序線程會(huì)暫停很短的時(shí)間。 Major GC期間使用的實(shí)際算法是并發(fā)標(biāo)記掃描。 您可能已經(jīng)注意到,“掃描”之后沒有“壓縮”。 沒錯(cuò)–并發(fā)標(biāo)記和清除是不會(huì)壓縮使用權(quán)空間的收集器,因此內(nèi)存可能會(huì)碎片化。 由于缺乏堆壓縮,當(dāng)GC無法將新對象放入內(nèi)存時(shí),JVM會(huì)回退到串行mark-sweep-compact算法以對舊版本進(jìn)行碎片整理和壓縮。 那就是性能下降到來的時(shí)候–所有應(yīng)用程序線程都停止了,只有一個(gè)線程負(fù)責(zé)清理和壓縮Tenured空間。

如前所述,CMS是低暫停收集器的一個(gè)示例。 這意味著當(dāng)延遲是主要目標(biāo)而不是吞吐量時(shí),這是一個(gè)不錯(cuò)的選擇-因?yàn)橥掏铝靠赡苡捎贑PU消耗的增加而降低(在應(yīng)用程序線程運(yùn)行時(shí)掃描堆不是免費(fèi)的)。

-XX:+UseConcMarkSweepGC啟用CMS收集器。 以前可以使用-XX:-UseParNewGC (單號“ UseParNewGC”之前減去-,因此請使用此標(biāo)記來禁用Parallel New(Young)GC)來配置具有單線程Young Generation集合的CMS,但已棄用在Java 8中已刪除,在Java 9中已刪除。

G1GC

垃圾優(yōu)先(G1)是一種新的低中斷垃圾收集器,旨在處理具有最小暫停的大型堆。 堆分為固定大小的幾個(gè)區(qū)域(同時(shí)仍保持堆的世代性質(zhì))。 這種設(shè)計(jì)使我們在處理整個(gè)“年輕一代”或“老一代”時(shí)擺脫了較長的STW暫停。 現(xiàn)在,可以分別收集每個(gè)區(qū)域,這將導(dǎo)致更短但更頻繁的STW暫停。 G1將對象從一個(gè)區(qū)域復(fù)制到另一個(gè)區(qū)域,這意味著堆至少已部分壓縮。

G1使用mark-sweep-compact算法的增量版本。 可以通過指定-XX:+UseG1GC標(biāo)志來啟用它。

摘要

這是本文討論的收集器的簡單比較:

集電極 多個(gè)GC線程 STW(年輕一代) STW(老一代) 堆壓實(shí) 首要目標(biāo)
序列號 沒有
平行 通量
不育系 僅在掃描期間 沒有 潛伏
G1 很短的 部分地 潛伏

還有一些其他垃圾收集器,但它們不是HotSpot JVM的一部分。 這些是:

  • C4(Azul Zing JVM)
  • 雪蘭多
  • 平衡(IBM J9 JVM)

在Java 8中,服務(wù)器級計(jì)算機(jī)的默認(rèn)GC是Parallel Collector。 G1GC在Java 9中將是默認(rèn)的。默認(rèn)情況下,客戶端類計(jì)算機(jī)運(yùn)行Serial Collector。

翻譯自: https://www.javacodegeeks.com/2017/09/gc-explained-collectors-overview.html

gc垃圾收集器 與gc算法

總結(jié)

以上是生活随笔為你收集整理的gc垃圾收集器 与gc算法_GC解释:收集器概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。