JVM中主要有以下几种垃圾回收器:
- Serial收集器:单线程垃圾回收器,使用标记-复制算法,适用于小型应用或者客户端应用,因为它的回收效率低下。
- Parallel收集器:多线程垃圾回收器,使用标记-复制算法,适用于大型应用或者服务器应用,因为它的回收效率高。
- CMS收集器:并发垃圾回收器,使用标记-清除算法,主要针对响应时间有要求的应用,因为它可以与应用程序并发运行。
- G1收集器:基于Region的垃圾回收器,使用标记-整理算法,主要针对大型应用或者数据量大的应用,因为它可以对整个堆进行分区回收。
- ZGC收集器:JDK 11引入的可伸缩低延迟垃圾回收器,使用标记-整理算法,适用于大型堆(数十TB)的应用场景,同时具有非常短的暂停时间。
- Shenandoah收集器:JDK 12引入的低延迟垃圾回收器,使用标记-整理算法,适用于大型堆(数十TB)的应用场景,同时具有非常短的暂停时间。
不同的垃圾回收器有不同的优缺点,选择合适的垃圾回收器要考虑应用场景、系统环境、性能要求等多方面因素。