Java垃圾回收之老年代垃圾收集器
1、Serial Old 收集器(-XX: +UseSerialOldGC, 標記-整理算法)
- 單線程收集,進行垃圾收集時,必須暫停所有工作線程
- 簡單高效,Client模式下默認的老年代收集器
?
2、Parallel Od收集器(-XX: +UseParallelOldGC? ,標記-整理)
- JDK6 之后才有這個收集器,多線程,吞吐量優先,如果注重CPU資源和吞吐量的場合,可以使用這個組合 Parallel Scavenge + Parallel Old 收集器
?
3、CMS收集器(這個收集器,占據了老年代收集器的半壁江山。-XX:+ UseConcMarkSweepGC ,標記-清除算法,有碎片產生)
優點:幾乎可以和用戶線程做到同時工作,本質還是要STOP-THE WORLD,只是停頓時間短
如果在老年代中存活更多存活率高的對象,使用CMD收集器更適合。
收集流程:(一邊掉垃圾一邊打掃)
初始標記:stop-the-world,從垃圾回收的根對象開始,只是掃描和根對象有關聯的對象并做標記。雖然暫停了所有的線程工作,但是停頓時間很短。
并發標記:并發追隨標記,程序不會停頓
并發預清理:查找執行并發標記階段從年輕代晉升到老年代的對象
重新標記:暫停虛擬機,掃描CMS堆中的剩余對象
并發清理:清理垃圾對象,程序不會停頓
并發重置:重置CMS收集器的數據結構
?
4、G1收集器(-XX:+UseG1GC , 復制+標記-整理算法)
Garbage First 收集器的特點
- 并發和并行
- 分代收集
- 空間整合
- 可預測的停頓
說明:這個收集器的內存布局與其他收集器有很大區別,將整個JAVA堆內存劃分成多個大小相等的Region,年輕代和老年代不再物理隔離
5、額外知識:JDK11 有 Epsilon GC 和 ZGC (研發階段)?
?
6、問題:為什么年輕代中的Parallel Scavenge收集器不能和老年代中的CMS收集器一起工作呢?
答:因為Parallel Scavenge收集器(G1)都沒有使用傳統的GC收集器代碼框架,都是另外獨立開發的。
而Serial,parNew,CMS都有使用了部分相同的收集器代碼框架,所有他們三個是兼容的。
(CMS是hotsport在jdk5才出來的真正意義上是并行收集器,第一次讓垃圾收集線程和用戶線程一起工作。)
總結
以上是生活随笔為你收集整理的Java垃圾回收之老年代垃圾收集器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java垃圾回收之新生代垃圾收集器
- 下一篇: 2022-2028年中国数据中台行业深度