Java中有幾種垃圾收集器

這篇文章主要講解了“Java中有幾種垃圾收集器”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java中有幾種垃圾收集器”吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名與空間、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、裕民網(wǎng)站維護(hù)、網(wǎng)站推廣。

垃圾收集器就是垃圾收集算法的具體實現(xiàn)。它們分別是新生代的:Serial、ParNew、ParallelScavenge老年代的:SerialOld、ParallelOld、CMS以及適用于新生代和老年代的G1。算上jdk11的ZGC目前一共是八種垃圾收集器。

Serial收集器

Serial是最早的垃圾收集器,這是一個單線程收集器,它只適用一個CPU或者是一條收集線去執(zhí)行回收任務(wù)。

ParNew收集器

ParNew是一個新生代的多線程的收集器,它相當(dāng)于是Serial的多線程版本。它的一些參數(shù)配置和Serial基本完全相同。只不過ParNew收集器在工作的時候,是多個線程工作的

ParNew適合在多個CPU場景下使用,而我們的線上服務(wù)器基本都是多核CPU,所以,使用新生代的ParNew搭配老年代的CMS收集器還是挺常見的,我所在的部門的系統(tǒng)線上就是使用的ParNew+CMS組合。與Serial相同的是,ParNew在進(jìn)行垃圾回收的時候,也會暫停所用的用戶線程。

ParallelScavenge收集器

ParallelScavenge也是一個新生代收集器,并且也是一個多線程收集器,ParallelScavenge關(guān)注的點是應(yīng)用的吞吐量,吞吐量=用戶代碼運行時間/用戶運行代碼時間+GC時間,它提供了兩個參數(shù)用來控制吞吐量,分別是控制最大垃圾收集停頓時間的-XX:MaxGCPauseMillis參數(shù)和直接設(shè)置吞吐量大小的-XX:GCTimeRatio參數(shù)。GCTimeRatio參數(shù)的值是一個大于0且小于100的整數(shù),也就是垃圾收集時間占總時間的比率,相當(dāng)于是吞吐量的倒數(shù)。高吞吐量可以高效的利用CPU時間,盡快完成計算任務(wù),因此,ParallelScavenge收集器也用于需要密集計算不需要進(jìn)行用戶交互的一些后臺。

SerivalOld收集器

SerivalOld收集器是垃圾收集的老年代版本,也是一個單線程收集器。

ParallelOld收集器

ParallelOld收集器是ParallelScavenge的老年代版本??梢允褂肞arallelScavenge+ParallelOld組合,在注重吞吐量和CPU資源敏感的場合可以優(yōu)先考慮ParallellSCavenge和ParallellOld組合。

CMS(ConcurrentMarkSweep)收集器

CMS(ConcurrentMarkSweep),并發(fā)標(biāo)記清除,這是一種追求低停頓時間為的收集器?;ヂ?lián)網(wǎng)時代,用戶體驗為王,垃圾收集的時間越短,給用戶帶來的體驗就越好。CMS收集器整個回收過程可以分為四個步驟:

初始標(biāo)記(CMSinintmark)

并發(fā)標(biāo)記(CMSconcurrentmark)

重新標(biāo)記(CMSremarkmark)

并發(fā)清除(CMSconcurrentsweep)

G1(GarBage-First)收集器

G1收集器是一款面向服務(wù)端的收集器,也就是說,它將低停頓時間作為終極目標(biāo)。G1與其他垃圾收集器的區(qū)別是它可以控制垃圾收集時間在某一個范圍之內(nèi)。與CMS垃圾收集的運行過程類似,它分為初始標(biāo)記,并發(fā)標(biāo)記,最終標(biāo)記,篩選回收。G1之所以能夠?qū)⑼nD時間控制在一個指定的時間內(nèi),就是因為它可以選擇性的進(jìn)行回收。

G1嘗試著去滿足最小的停頓時間,在G1中,停頓時間是可以設(shè)置的,是可控制的,之所以可以建立可預(yù)測的停頓時間模型,是因為G1避免了在java堆中進(jìn)行全區(qū)域的垃圾收集。傳統(tǒng)的新生代老年代的內(nèi)存模型被多個大小相等的獨立區(qū)域(Region)所取代。如下圖所示,雖然新生代和老年代的概念還保留著,但是他們不再是物理隔離的了,他們都是由Region所組成。G1在清除階段是有選擇性的,它會根據(jù)設(shè)置的停頓時間,選擇回報率最大的Region。Region可以說是G1回收器一次回收的最小單元。即每一次回收都是回收N個Region。這個N是多少,主要受到G1回收的效率和用戶設(shè)置的軟實時目標(biāo)有關(guān)。

ZGC

Z垃圾收集器(ZGC)是可伸縮的低延遲垃圾收集器。ZGC可以同時執(zhí)行所有昂貴的工作,而不會將應(yīng)用程序線程的執(zhí)行停止超過10ms,這使得它適合于要求低延遲和/或使用非常大的堆(數(shù)TB)的應(yīng)用程序。

目前ZGC沒有分代,每次GC都會標(biāo)記整個堆,將堆分為2M(small),32M(medium),n*2M(large)三種大小的頁面(Page)來管理,根據(jù)對象的大小來判斷在哪種頁面分配,大部分對象標(biāo)記和對象轉(zhuǎn)移都是可以和應(yīng)用線程并發(fā)。

感謝各位的閱讀,以上就是“Java中有幾種垃圾收集器”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java中有幾種垃圾收集器這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

文章題目:Java中有幾種垃圾收集器
分享URL:http://muchs.cn/article38/pdpcsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站域名注冊、小程序開發(fā)、關(guān)鍵詞優(yōu)化、、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化