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

相关推荐

  1. jvm垃圾回收

    2024-01-13 19:22:02       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 19:22:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 19:22:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 19:22:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 19:22:02       20 阅读

热门阅读

  1. Go语言中的同步原语:ErrGroup、Semaphore和SingleFlight

    2024-01-13 19:22:02       37 阅读
  2. 网络设备远程运维管理解决方案

    2024-01-13 19:22:02       39 阅读
  3. ReactHooks:useEffect使用指南

    2024-01-13 19:22:02       45 阅读
  4. Vue的响应式编程

    2024-01-13 19:22:02       43 阅读
  5. Driver.js使用指南

    2024-01-13 19:22:02       38 阅读
  6. TypeScript基础知识:类型守卫和类型推断

    2024-01-13 19:22:02       37 阅读
  7. 【WPF.NET开发】WPF中的拖放

    2024-01-13 19:22:02       37 阅读
  8. C# Chart控件

    2024-01-13 19:22:02       30 阅读