【jvm】垃圾回收的并行和并发
目录
- 1. 说明
- 2. 并行(Parallel)
- 2.1 定义
- 2.2 特点
- 2.3 示例
- 3. 并发(Concurrent)
- 3.1 定义
- 3.2 特点
- 3.3 示例
- 4. 并行与并发的比较
1. 说明
- 1.在JVM(Java虚拟机)的垃圾回收机制中,并行(Parallel)和并发(Concurrent)是两个重要的概念,它们描述了垃圾回收线程与用户线程之间的关系,以及垃圾回收过程中多线程的执行方式。
2. 并行(Parallel)
2.1 定义
- 1.并行描述的是多条垃圾收集器线程之间的关系,指的是垃圾回收线程在执行垃圾回收任务时,会同时启动多个线程协同工作,以提高垃圾回收的效率。
2.2 特点
- 1.多线程执行:并行垃圾回收器会使用多个CPU核心同时执行垃圾回收任务,加快垃圾回收的速度。
- 2.用户线程暂停:在垃圾回收过程中,用户线程(即应用程序的工作线程)需要暂停执行,直到垃圾回收任务完成。这种暂停被称为“Stop-the-World”(STW)。
- 3.适用场景:并行垃圾回收器适用于对吞吐量要求较高,而对延迟要求相对较低的应用场景,如后台计算任务。
2.3 示例
- 1.Parallel Scavenge:一款并行的新生代垃圾回收器,关注吞吐量,适合在后台运算而不需要太多交互的任务。
- 2.Parallel Old:Parallel Scavenge收集器的老年代版本,同样支持多线程并发收集,基于标记-整理算法实现。
3. 并发(Concurrent)
3.1 定义
- 1.并发描述的是垃圾收集器线程与用户线程之间的关系,指的是垃圾回收线程与用户线程在同一时间段内可以同时运行,即垃圾回收线程在执行垃圾回收任务时,用户线程仍然可以继续执行。
3.2 特点
- 1.多线程执行:并发垃圾回收器也会使用多个线程执行垃圾回收任务,但与并行垃圾回收器不同的是,它允许用户线程在垃圾回收过程中继续执行。
- 2.减少停顿时间:由于用户线程不需要在垃圾回收过程中暂停,因此并发垃圾回收器能够显著减少应用程序的停顿时间,提高用户体验。
- 3.资源占用:并发垃圾回收器需要占用一定的系统资源(如CPU时间、内存等)来执行垃圾回收任务,这可能会影响应用程序的处理能力。
- 4.适用场景:并发垃圾回收器适用于对延迟要求较高,而对吞吐量要求相对较低的应用场景,如交互式应用程序。
3.3 示例
- 1.CMS(Concurrent Mark Sweep):一种以获取最短回收停顿时间为目标的并发垃圾回收器,基于标记-清除算法实现。
- 2.G1(Garbage First):一款面向服务端应用的垃圾收集器,结合了并行和并发的特点,旨在以极高概率满足GC停顿时间的同时,还兼具高吞吐量的性能特征。
4. 并行与并发的比较
并行(Parallel) | 并发(Concurrent) | |
---|---|---|
描述关系 | 多条垃圾收集器线程之间的关系 | 垃圾收集器线程与用户线程之间的关系 |
多线程执行 | 多线程同时执行垃圾回收任务 | 多线程执行垃圾回收任务,用户线程继续执行 |
用户线程状态 | 用户线程暂停执行(STW) | 用户线程继续执行 |
适用场景 | 对吞吐量要求较高,对延迟要求相对较低的应用场景 | 对延迟要求较高,对吞吐量要求相对较低的应用场景 |
资源占用 | 主要占用CPU资源进行垃圾回收 | 需要占用一定的系统资源(CPU、内存等)来执行垃圾回收任务 |
典型示例 | Parallel Scavenge、Parallel Old | CMS、G1 |