什么是JVM垃圾收集器
垃圾收集器是負責執(zhí)行垃圾回收的組件
,它們用于管理Java程序運行時的內(nèi)存分配和釋放
。垃圾收集器的主要任務是自動回收不再使用的內(nèi)存對象
,并將內(nèi)存空間重新回收
以供程序繼續(xù)使用。
四種垃圾收集器(按類型分)
1.串行垃圾收集器(效率低)
Serial和Serial Old串行垃圾收集器,是指使用單線程進行垃圾回收
,堆內(nèi)存較小,適合個人電腦
- Serial 作用于新生代,采用復制算法
- Serial Old 作用于老年代,采用標記-整理算法
垃圾回收時,只有一個線程在工作
,并且java應用中的所有線程都要暫停
(STW),等待垃圾回收的完成。
2.并行垃圾收集器(JDK8默認使用此垃圾回收器)
Parallel New和Parallel Old是一個并行垃圾回收器,JDK8默認使用此垃圾回收器
- Parallel New作用于新生代,采用復制算法
- Parallel Old作用于老年代,采用標記-整理算法
垃圾回收時,多個線程在工作,并且java應用中的所有線程都要暫停(STW
),等待垃圾回收的完成。(通過并行執(zhí)行垃圾回收以提高性能)
相比較與串行垃圾收集器,并行垃圾收集器無非就是多開寫線程來做垃圾回收,其實同樣也要暫停所有正在執(zhí)行的線程,只不過在多個線程并行回收效率比串行高
3.CMS(并發(fā))垃圾收集器(只針對老年代垃圾回收的)
CMS全稱 Concurrent Mark Sweep,是一款并發(fā)的
、使用標記-清除算法
的垃圾回收器,該回收器是針對老年代垃圾回收的
,是一款以獲取最短回收停頓時間
為目標的收集器,停頓時間短
,用戶體驗就好
。
其最大特點是在進行垃圾回收時,應用仍然能正常運行。
4.G1垃圾回收器(在JDK9之后默認使用G1)
G1垃圾收集器的設計目標是
在可控的停頓時間
內(nèi)實現(xiàn)高吞吐量的垃圾回收。
- 應用于
新生代
和老年代
- 劃分成
多個區(qū)域
,每個區(qū)域
都可以充當 eden,survivor,old, humongous,其中humongous 專為大對象準備
- 采用
標記整理算法
因為基本上G1主要針對大型堆內(nèi)存進行垃圾回收,而復制算法在大型堆內(nèi)存上的應用存在一些挑戰(zhàn)和限制。(必須考慮內(nèi)存空間使用率)
-
響應時間與吞吐量兼顧
-
分成三個階段:新生代回收、并發(fā)標記、混合收集(在不同的條件下被觸發(fā))
-
如果并發(fā)失敗(即回收速度趕不上創(chuàng)建新對象速度),會觸發(fā) Full GC(盡量避免)
如果對象內(nèi)存分配速度過快,mixed gc來不及回收,導致老年代被填滿,就會觸發(fā)一次full gc,G1的full gc算法就是單線程執(zhí)行的serial old gc,會導致異常長時間的暫停時間,需要進行不斷的調(diào)優(yōu),盡可能的避免full gc.
第一階段----->Young Collection(年輕代垃圾回收)
- 初始時,所有區(qū)域都處于空閑狀態(tài)
- 創(chuàng)建了一些對象,挑出一些空閑區(qū)域作為
eden區(qū)
存儲這些對象 - 當伊甸園需要垃圾回收時,挑出一個空閑區(qū)域作為
幸存區(qū)(s)
,用復制算法復制存活對象
,需要暫停用戶線程
- 隨著時間流逝,
eden區(qū)
的內(nèi)存又有不足 將eden區(qū)
以及之前幸存區(qū)中的存活對象
,采用復制算法
,復制到新的幸存區(qū)
,其中較老對象
晉升至老年代(o)
XX:MaxTenuringThreshold(默認15),計算出一個恰當?shù)娜纹陂撝担彩浅^任期閾值的對象都會被晉升到老年代。
或者幸存區(qū)里有大對象,也會直接晉升到老年代(畢竟大對象,復制來復制去影響整體效率)
Young Collection + Concurrent Mark (年輕代垃圾回收+并發(fā)標記)
當老年代
占用內(nèi)存超過閾值(默認是45%)
后,觸發(fā)并發(fā)標記
,這時無需暫停用戶線程
并發(fā)標記之后
,會有重新標記階段解決漏標問題
,此時需要暫停用戶線程。
這些都完成后就知道了老年代有哪些存活對象,隨后進入混合收集階段
。此時不會對所有老年代區(qū)域進行回收
,而是根據(jù)停頓時間目標優(yōu)先回收價值高(存活對象少)的區(qū)域
(這也是 Gabage First 名稱的由來)。
注意,這個階段只是做標記,根據(jù)重新標記停頓時間來判斷哪些老年代里面或的對象少,下一階段優(yōu)先對這些回收價值高的老年代來回收
第三階段----->Mixed Collection (混合垃圾回收,新老都參與)
混合收集階段中,參與復制的有 eden、survivor、old
復制完成,內(nèi)存得到釋放。進入下一輪
的新生代回收、并發(fā)標記、混合收集文章來源:http://www.zghlxwxcb.cn/news/detail-644080.html
G1和CMS區(qū)別
文章來源地址http://www.zghlxwxcb.cn/news/detail-644080.html
到了這里,關于【JVM】JVM垃圾收集器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!