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

相关推荐
Derek_Smart1 天前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
大道至简Edward1 天前
深入 JVM 核心:一文读懂 Class 文件结构(附 Hex 实战解析)
jvm
weisian1515 天前
JVM--20-面试题6:如何判断对象可以被垃圾回收?
jvm·可达性算法
蚊子码农5 天前
每日一题--JVM线程分析与死锁排查
jvm
xuxie995 天前
NEXT 1 进程2
java·开发语言·jvm
weisian1515 天前
JVM--19-面试题5:说说JVM的类加载机制和双亲委派模型
jvm·双亲委派模型·jvm类加载机制
亓才孓5 天前
【反射机制】
java·javascript·jvm
Volunteer Technology5 天前
JVM之性能优化
jvm·python·性能优化
Andy Dennis5 天前
Java语法注意事项
java·开发语言·jvm
坚持的小马5 天前
JVM相关笔记-jps
jvm·笔记