【JVM学习笔记】对象的创建过程、 对象的内存布局、 如何定位和使用对象
【JVM学习笔记】内存回收与内存回收算法 就哪些地方需要回收、什么时候回收、如何回收三个问题进行分析和说明
HotSpot VM垃圾收集器——Serial Parallel CMS G1垃圾收集器的JVM参数、使用说明、GC分析
【JVM基础内容速查表】JVM基础知识 默认参数 GC命令 工具使用 JVM参数设置、说明、使用方法、注意事项等
HotspotVM的垃圾收集器简介
1. Serial Collector
Serial收集器是最基础、历史最悠久的收集器。由一个线程处理所有垃圾收集工作,单线程避免了静态条件,可能会相对的提高工作效率。在单线程处理器,或多线程处理器中需要处理少量数据集(100MB左右)时,有比较明显的优势。
- Serail Young:Serial的新生代垃圾收集器,采用标记-复制算法 。
- Serial Old:Serial的老年代垃圾收集器,采用标记-整理算法。
2. Parallel Collector(throughput collector)
是Serial的多线程版,由多线程执行垃圾收集工作,适合在多处理器中处理中大型数据集,特别是在新生代并发执行时,能显著的减少垃圾收集器的开销。
- Parallel Young (ParNew):Parallel的新生代垃圾收集器,Serail Young的多线程版,它默认开启的收集线程数与处理器核心数量相同(-XX:ParallelGCThreads 可以限制收集线程数),侧重以多线程工作来降低暂停时长,采用标记-复制算法。
- Parallel Young (PSYoungGen或称Parallel Scavenge):Parallel的新生代垃圾收集器,与ParNew不同,它是一个以吞吐量优先的并发垃圾收集器,侧重于吞吐量的控制(控制最大垃圾收集停顿时间:-XX:MaxGCPauseMillis、设置吞吐量大小:-XX:GCTimeRatio),采用标记-复制算法。
- Parallel Old:Parallel的老年代垃圾收集器,Serial Old的多线程版,标记-整理算法。
3. Concurrent Mark Sweep Collector(CMS)
并发垃圾收集器,适合处理中大型数据集,甚至可以在程序允许时并发的处理大部分工作。这种收集器适用于需要更短暂停时长、对吞吐量要求不高的程序,不过它需要更多的处理器资源以快速处理垃圾收集工作。
- CMS:用于老年代,采用标记-清除算法。 优点:并发收集、低停顿;缺点:需要更多的处理器资源、产生大量空间碎片等。CMS默认启动的回收线程数是(处理器核心数量+3)/4,核心越多占用CPU越少,但是当CPU小于四个时,它占用的处理器资源也就越大。
4. Garbage-First Garbage Collector(G1)
G1是一种服务器端的并发垃圾收集器。与CMS相似,G1也适合处理中大型数据集,可以在程序允许时并发的处理大部分工作;不过G1收集器适用于具有大内存的多处理器机器,它在实现高吞吐量的同时,并能以高概率满足垃圾回收暂停时间目标。
- G1:虽然它的目标是取代CMS收集器,但其实G1是一个跨代的垃圾收集器,它将会收集所有区域的内存,因此G1无法与其它收集器组合。关于G1的内存结构可以参考这篇。
5. Z Garbage Collector(ZCG)JDK11
暂时没有研究,有空了再回来看
参考: