✅说一说JVM的并发回收和并行回收

典型回答

很多人知道并发和并行的概念,并发指的是一个CPU不断的通过时间片切换来执行不同的任务,并行是指多个CPU同时执行不同的任务。

✅什么是并发,什么是并行?

在Java的GC中,也有并发回收和并行回收的概念,但是这两个概念和我们前面提到的并发和并行之间的区别没啥关系。

我们说的并行回收其实就是Parallel GC,具体到垃圾收集器的实现上,就是Parallel Scavenge,Parallel Old,ParNew等收集器。而我们说的并发回收比较典型的就是 Concurrenct Mark and Sweep GC,也就是我们常说的CMS,当然G1也是并发回收器

关于这几种垃圾收集器的介绍,可以看下面这篇文章,大家看完之后再继续看本文

✅新生代和老年代的垃圾回收器有何区别?

那么,其实我们所熟悉的并行回收器主要的关注目标是吞吐量(吞吐量=代码运行时间/(代码运行时间+垃圾收集时间),所以他会想尽办法最高效率的利用CPU时间来进行垃圾回收。所以他会在垃圾收集期间通常会暂停应用程序的执行(STW),以快速完成垃圾收集。

所以,并行回收器可以在多核处理器上显著提高垃圾收集的速度,尤其是在堆内存较大,且CPU资源充足的场景下效果最佳。

并发回收器主要关注的目标是STW的时长,它允许垃圾收集线程在应用程序线程运行的同时执行部分垃圾收集工作,从而减少了STW的时间。并发回收期间,只有在特定的收集阶段会发生短暂的STW。

✅什么是STW?有什么影响?

所以,并发回收器减少了应用程序的停顿时间,适用于需要较低延迟的应用场景。

在适用场景上,并行垃圾回收适用于对停顿时间(STW时间)要求不是非常严格,但希望最大化吞吐量的应用。而并发垃圾回收适用于对响应时间敏感的应用,如在线交易处理系统、游戏服务器等,这些应用需要尽可能减少GC引起的停顿。

原文: https://www.yuque.com/hollis666/xkm7k3/srfo2k1o2nq4dp7f