由于工作原因,好久没有更新博客了,但是学习的脚步一直没有停止,因为疫情原因,在家办公,因此上下班的通勤时间空闲出来,今天就和大家分享下jvm垃圾回收器的相关知识,这篇只做简单介绍,后面会一一详细和大家分析各个回收期的具体回收细节和工作原理。
jvm中的垃圾回收器的各自特点
1. Serial和Serial Old垃圾回收器
这两个回收器分别是用来回收新生代和老年代的。其特点就是单线程运行。垃圾回收的时候,会停止其他工作线程的工作,这时系统会卡死,暂时不可用,等他们回收完毕,才能正常运行。这种回收器现在很少用到,基本后台的java系统都不会用这个回收器。除非你的服务器是单核,那么可以选用这种回收器,否则效率会很差。
2. ParNew和CMS垃圾回收器
ParNew现在一般都是用来回收新生代垃圾对象,而CMS则是用在老年代的垃圾回收。他们的特点就是多线程工作,在垃圾回收的时候,会开启多个线程并发执行,这样性能更好,除了在某些特定的回收阶段,大部分时间都是不影响其他线程工作的,因此相比Serial来说回收效率更高,性能更好,这两个回收器一般是大多数公司选用的标配组合。
3. G1垃圾回收器
这种垃圾回收器很特别,这个回收器可以统一回收年轻代和老年代的垃圾对象。相比前两种回收器,它采用了更优秀的算法和设计机制。但是他也有自己的缺点,这种回收期一般在服务器内存很大的时候,会选用这种回收器,可以更高效,更灵活的利用和回收内存。