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指定为服务端模式。

相关推荐
减_简5 小时前
JVM 之 内存溢出实战【OOM? SOF? 哪些区域会溢出?堆、虚拟机栈、元空间、直接内存溢出时各自的特点?以及什么情况会导致他们溢出?并模拟溢出】
jvm
五道书童5 小时前
IDEA中如何设置JVM启动参数
java·jvm·intellij-idea
减_简11 小时前
JVM 之 线上诊断神器Arthas【常用命令?如何使用Arthas排查cpu飙高、类加载问题、死锁、慢接口等问题?】
jvm
透明的玻璃杯11 小时前
sqlite数据库连接池
jvm·数据库·sqlite
7ioik11 小时前
jvm性能检测及调优?
jvm
何中应11 小时前
【面试题-4】JVM
java·jvm·后端·面试题
7ioik11 小时前
jvm垃圾回收算法?
jvm·算法
没有bug.的程序员1 天前
高频IO服务优化实战指南
java·jvm·spring·容器
Donald_brian1 天前
线程同步
java·开发语言·jvm
喵了meme1 天前
Linux学习日记19:线程同步与互斥锁
java·jvm·学习