https://blog.csdn.net/qq_43108252/article/details/140248588
垃圾回收器主要做的事情
垃圾回收器 | 简述 | 优缺点 | 应用场景 | 备注 |
---|---|---|---|---|
Serial GC | 这是最基本、最古老的GC,它使用单线程进行垃圾回收,不能进行并行处理。因此,当它在进行垃圾回收时,用户线程必须暂停,等待垃圾回收完成。这种方式称为"Stop-The-World"。 | 优点:简单高效,对于限制了CPU资源的环境,能提供很高的单线程垃圾回收效率。 | 适用于单核处理器环境,或者小型应用。 | |
Parallel GC | 也称为吞吐量收集器,它是Serial GC的多线程版本。它在垃圾回收时也会暂停用户线程,但由于使用了多线程,所以垃圾回收的速度更快。 | 优点:多线程并行垃圾回收,提高了垃圾回收的效率。 |
缺点:在垃圾回收过程中,所有CPU资源都会被用于垃圾回收,可能导致应用程序的性能下降 | 适用于多核处理器环境,以及对吞吐量要求较高的大型应用。 | | | CMS(Concurrent Mark Sweep) GC | 这是一种以获取最短回收停顿时间为目标的收集器。它大部分工作都可以和用户线程并发执行,只有在初始标记和重新标记阶段需要"Stop-The-World"。 | 优点:大部分工作都可以和用户线程并发执行,减少了"Stop-The-World"的时间,提高了应用的响应性。
缺点:由于需要和用户线程并发执行,所以对CPU资源的消耗较大。另外,CMS GC无法处理浮动垃圾,可能会导致内存碎片 | 适用于对系统响应时间要求较高的应用。 | 适用于对系统响应时间要求较高的应用。 | | G1 GC: | 全称"Garbage-First",是一种面向服务器的垃圾收集器,主要用于多核处理器和大内存环境。G1 GC通过划分多个小块区域的方式,尽可能地减少"Stop-The-World"的时间。 | 优点:可以预测停顿时间,实现了可控制的垃圾回收。通过划分多个小块区域的方式,尽可能地减少"Stop-The-World"的时间。
缺点:在某些情况下,G1 GC的垃圾回收效率可能不如CMS GC(堆内存较小、对象存活率较高)。另外,G1 GC需要更多的CPU资源来保证高吞吐量。 | 使用场景:适用于多核处理器和大内存环境,以及对系统停顿时间有严格要求的大型应用。 | | | | | | | |
停顿指垃圾回收期间STW(Stop The World),当STW时,所有应用线程停止活动,等待GC停顿结束。
CMS新生代的Young GC、G1Young GC以及混合回收的和ZGC都基于标记-复制算法
Yong GC和G1标记复制算法的实现
标记阶段,即从GC Roots集合开始,标记活跃对象;
转移阶段,即把活跃对象复制到新的内存地址上;