JVM基础(7)——ParNew垃圾回收器

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析

阶段4、深入jdk其余源码解析

阶段5、深入jvm源码解析

一、简介

ParNew是目前最常用的JVM垃圾回收器之一,主要应用在 新生代 的GC中。ParNew采用了多线程垃圾回收机制,ParNew垃圾回收器在执行Minor GC时,会将JVM中的工作线程全部停止掉,禁止程序在运行时创建新的Java对象,然后自己用多个垃圾回收线程去进行垃圾回收,回收的机制和算法跟前面章节介绍的一样。

二、使用方式

通过JVM的参数设置,可以显式指定使用ParNew作为新生代的垃圾回收器。-XX:+UseParNewGC,只要加入这个选项,JVM启动之后就会使用ParNew进行新生代的垃圾对象回收。

默认情况下,ParNew设置的回收线程数与机器的CPU核心数相同。也就是说,假如我们线上的机器是8核,那么此时ParNew的垃圾回收线程数就是8个。比如下图,每个GC线程都通过一个CPU在运行:

线程数一般不需要手动设置,保持跟CPU核心数一致就可以充分进行并行处理。假如一定要手动设置,则使用-XX:ParallelGCThreads参数设置。

三、适用场景

我们上一章还提到过一种垃圾回收器------Serial,Serial是一种单线程的垃圾收集器,生产环境的服务端应用基本不会使用该收集器,但是有一类Java应用还是可能会用到Serial,即客户端Java应用,比如百度云盘的Windows客户端、印象笔记的Windows客户端等等。

由于客户端Java应用一般运行在PC上,且很多PC还是单核的,所以如果采用ParNew进行垃圾回收,就会导致一个CPU运行多个线程,此时会出现频繁的上下文切换,反而加重了性能开销,可能效率还不如单线程好。

所以,在使用ParNew作为生产环境的垃圾回收器时,记得使用-server指定为服务端模式。

相关推荐
长臂人猿2 分钟前
JVM常用工具:jstat、jmap、jstack
linux·运维·jvm
柠檬味的薄荷心30 分钟前
【C#补全计划】多线程
jvm
啊阿狸不会拉杆1 小时前
《算法导论》第 27 章 - 多线程算法
java·jvm·c++·算法·图论
稚辉君.MCA_P8_Java7 小时前
豆包 Java的23种设计模式
java·linux·jvm·设计模式·kubernetes
CCCC131016317 小时前
嵌入式学习(day 28)线程
jvm·学习
没有bug.的程序员17 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
舒一笑1 天前
Started TttttApplication in 0.257 seconds (没有 Web 依赖导致 JVM 正常退出)
jvm·spring boot·后端
搬砖的小熊猫1 天前
JVM核心原理与实战优化指南
jvm
静若繁花_jingjing1 天前
JVM执行引擎深入理解
jvm
CHEN5_022 天前
【Java虚拟机】垃圾回收机制
java·开发语言·jvm