您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java中有幾種垃圾收集器”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java中有幾種垃圾收集器”吧!
垃圾收集器就是垃圾收集算法的具體實現(xiàn)。它們分別是新生代的:Serial、ParNew、ParallelScavenge老年代的:SerialOld、ParallelOld、CMS以及適用于新生代和老年代的G1。算上jdk11的ZGC目前一共是八種垃圾收集器。
Serial是最早的垃圾收集器,這是一個單線程收集器,它只適用一個CPU或者是一條收集線去執(zhí)行回收任務。
ParNew是一個新生代的多線程的收集器,它相當于是Serial的多線程版本。它的一些參數(shù)配置和Serial基本完全相同。只不過ParNew收集器在工作的時候,是多個線程工作的
ParNew適合在多個CPU場景下使用,而我們的線上服務器基本都是多核CPU,所以,使用新生代的ParNew搭配老年代的CMS收集器還是挺常見的,我所在的部門的系統(tǒng)線上就是使用的ParNew+CMS組合。與Serial相同的是,ParNew在進行垃圾回收的時候,也會暫停所用的用戶線程。
ParallelScavenge也是一個新生代收集器,并且也是一個多線程收集器,ParallelScavenge關注的點是應用的吞吐量,吞吐量=用戶代碼運行時間/用戶運行代碼時間+GC時間,它提供了兩個參數(shù)用來控制吞吐量,分別是控制最大垃圾收集停頓時間的-XX:MaxGCPauseMillis參數(shù)和直接設置吞吐量大小的-XX:GCTimeRatio參數(shù)。GCTimeRatio參數(shù)的值是一個大于0且小于100的整數(shù),也就是垃圾收集時間占總時間的比率,相當于是吞吐量的倒數(shù)。高吞吐量可以高效的利用CPU時間,盡快完成計算任務,因此,ParallelScavenge收集器也用于需要密集計算不需要進行用戶交互的一些后臺。
SerivalOld收集器是垃圾收集的老年代版本,也是一個單線程收集器。
ParallelOld收集器是ParallelScavenge的老年代版本??梢允褂肞arallelScavenge+ParallelOld組合,在注重吞吐量和CPU資源敏感的場合可以優(yōu)先考慮ParallellSCavenge和ParallellOld組合。
CMS(ConcurrentMarkSweep),并發(fā)標記清除,這是一種追求低停頓時間為的收集器?;ヂ?lián)網(wǎng)時代,用戶體驗為王,垃圾收集的時間越短,給用戶帶來的體驗就越好。CMS收集器整個回收過程可以分為四個步驟:
初始標記(CMSinintmark)
并發(fā)標記(CMSconcurrentmark)
重新標記(CMSremarkmark)
并發(fā)清除(CMSconcurrentsweep)
G1收集器是一款面向服務端的收集器,也就是說,它將低停頓時間作為終極目標。G1與其他垃圾收集器的區(qū)別是它可以控制垃圾收集時間在某一個范圍之內(nèi)。與CMS垃圾收集的運行過程類似,它分為初始標記,并發(fā)標記,最終標記,篩選回收。G1之所以能夠將停頓時間控制在一個指定的時間內(nèi),就是因為它可以選擇性的進行回收。
G1嘗試著去滿足最小的停頓時間,在G1中,停頓時間是可以設置的,是可控制的,之所以可以建立可預測的停頓時間模型,是因為G1避免了在java堆中進行全區(qū)域的垃圾收集。傳統(tǒng)的新生代老年代的內(nèi)存模型被多個大小相等的獨立區(qū)域(Region)所取代。如下圖所示,雖然新生代和老年代的概念還保留著,但是他們不再是物理隔離的了,他們都是由Region所組成。G1在清除階段是有選擇性的,它會根據(jù)設置的停頓時間,選擇回報率最大的Region。Region可以說是G1回收器一次回收的最小單元。即每一次回收都是回收N個Region。這個N是多少,主要受到G1回收的效率和用戶設置的軟實時目標有關。
Z垃圾收集器(ZGC)是可伸縮的低延遲垃圾收集器。ZGC可以同時執(zhí)行所有昂貴的工作,而不會將應用程序線程的執(zhí)行停止超過10ms,這使得它適合于要求低延遲和/或使用非常大的堆(數(shù)TB)的應用程序。
目前ZGC沒有分代,每次GC都會標記整個堆,將堆分為2M(small),32M(medium),n*2M(large)三種大小的頁面(Page)來管理,根據(jù)對象的大小來判斷在哪種頁面分配,大部分對象標記和對象轉移都是可以和應用線程并發(fā)。
感謝各位的閱讀,以上就是“Java中有幾種垃圾收集器”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Java中有幾種垃圾收集器這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。