本文主要是介绍HotSpot虚拟机的经典垃圾收集器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
读《深入理解Java虚拟机》第三版笔记。
关系
Serial
、ParNew
、Parallel Scavenge
、Parallel Old
、Serial Old(MSC)
、Concurrent Mark Sweep (CMS)
、Garbage First(G1)
收集器。
如图:
1、Serial 和 Serial Old 收集器
2、ParNew 收集器
3、Parallel Scavenge 和 Parallel Scavenge Old 收集器
4、CMS (Concurrent Mark Sweep) 收集器
5、G1(Garbage First) 收集器
6、G1和CMS的比较。
- 从G1开始,最先进的垃圾收集器的设计导向都不约而同地变为追求能够应付应用的内存分配率(Allocation Rate),而不追求一次把这个Java堆完全清理干净。
- 都关注停顿时间的控制,都被称为“The Mostly Concurrent Collectors”。
- 收集算法不同,CMS基于“标记-清除”算法,G1整体基于“标记-整理”,局部基于“标记-复制”,G1不会产生内存碎片。
- 内存占用不用,G1的卡表实现复杂,导致G1的记忆集和其他内存可能占堆内存容量20%以上,CMS相对较少。
- 执行负载上不同,在并发标记时,G1实现快照搜索(SATB)需要写前、后屏障,CMS实现增量更新,使用写后屏障。CMS写屏障,直接的同步操作,G1不得不实现类似消息队列,异步处理。
据原书作者经验,在Java堆6-8Gb的平衡点,以下CMS更能发挥优势,以上G1更能发挥优势。
这篇关于HotSpot虚拟机的经典垃圾收集器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!