Java虚拟机主要有两代(Generation)垃圾回收器:新一代(Young Generation)垃圾回收器和老年人(Old Generation)垃圾回收器。它们的功能和区别如下:
- 新一代垃圾回收器:
- 新一代是存储新对象的内存区域,一般占整个堆内存的一小部分。
- 新一代垃圾回收器主要负责回收新一代内存区的垃圾对象。
- Seriall是新生代常见的垃圾回收器、ParNew、Parallel Scavenge等。
- 新一代垃圾回收器的特点是采用复制算法将生存对象复制到另一个未使用的内存区域,然后清除使用的内存,实现垃圾回收。
- 老年垃圾回收器:
- 老年人是存储存活时间较长的对象的内存区域,一般占整个堆内存的大部分。
- 老年垃圾回收器主要负责老年内存区垃圾对象的回收。
- Seriall是老年人常见的垃圾回收器 Old、Parallel Old、CMS(Concurrent Mark Sweep)等。
- 老年垃圾回收器的特点是采用标记清除算法,通过标记生存对象和清除未标记的垃圾对象来实现垃圾回收。
区别:
- 对象的存活时间:新一代对象的存活时间一般较短,而老年对象的存活时间较长。
- 垃圾回收算法:新一代垃圾回收器采用复制算法,而老年垃圾回收器采用标记清除算法。
- 垃圾回收频率:由于新一代对象的生命周期短,新一代垃圾回收器的回收频率较高;老年垃圾回收器的回收频率较低,因为老年对象的生命周期较长。
- 回收的影响:由于需要复制生存对象,新一代垃圾回收器的回收会导致较长的停顿时间;在老年,垃圾回收器的回收一般采用并发或平行的方式,以减少停顿时间。
需要注意的是,应根据应用特点、硬件环境和性能要求,对垃圾回收器的具体选择和调整进行评估和决策。