jvm中的垃圾并行收集

61 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 13 天,点击查看活动详情

什么是垃圾并行收集?

在 jvm 中 垃圾回收这一块我们常用的 java8 中的 虚拟机默认使用的就是并行的垃圾收集机制,那么什么是并行垃圾收集?
并行垃圾收集就是指在使用多个 GC worker 线程去进行并行的执行垃圾收集,这样做有什么好处呢,首先它能充分利用多核CPU的能力,其次可以缩短垃圾收集过程中的暂停时间,从而提高程序运行的效率。
当然除了单线程的GC,一般常用的垃圾收集器比如 PS、CMS、G1 等新的垃圾收集器都是使用了多个线程来并行的执行垃圾收集操作。

image.png

可以看一下以上的GC流程,首先当我们程序运行过程中运行的是用户线程,比如说 CPU0、CPU1、CPU3、CPU4 四核CPU在进行运行,运行的过程中如果遇到了垃圾回收,我们的程序就会 Safepoint 也就是会暂停程序中所有的用户线程,暂停之后呢就会去启动 GC 线程,图中启动了三个GC线程去进行垃圾回收,因为是启动了三个线程,那么整个垃圾回收的过程是三个线程进行并行的垃圾回收,从而缩短了用户线程的暂停时间,极大的提高了运行效率。
当然并不是所有的垃圾收集器都会在垃圾收集的过程中暂停所有的用户线程,但大多数的垃圾收集器是会在垃圾收集的过程中进行暂停所有的用户线程然后进行垃圾收集,比如 PS 。
所以垃圾把并行收集其实就是由于垃圾收集的过程中会暂停所有的用户线程,所以开辟多个线程进行垃圾收集从而提高程序的运行效率。