GC之7大垃圾收集器详解


目录

  1. GC之7大垃圾收集器概述
  2. GC之Serial收集器
  3. GC之ParNew收集器
  4. GC之Parallel收集器
  5. GC之ParallelOld收集器
  6. GC之CMS收集器
  7. GC之SerialOld收集器
  8. GC之如何选择垃圾收集器
  9. GC之G1收集器

1. GC之7大垃圾收集器概述

  1. 垃圾收集器具体实现GC算法并实现内存回收。不同厂商,不同版本的虚拟机实现差别很大,HotSpot中包含的收集器如下图所示:

  2. 部分参数说明,下面会见到。

  3. 小扩展:Server/Client模式分别是什么意思


2. GC之Serial收集器


  1. 串行收集器:Serial收集器,一个单线程收集器,在进行垃圾收集时候,必须暂停其他所有的工作线程直到它收集结束

  2. 串行收集器是最古老,最稳定以及效率高的收集器,只使用一个线程去回收但其在进行垃圾收集过程中可能会产生较长的停顿(Stop-The-world状态)。虽然在收集垃圾过程中需要暂停所有其他的工作线程,但是它简单高效,对于限定单个CPU环境来说,没有线程交互的开销可以获得最高的单线程垃圾收集效率,因此Serial垃圾收集器依然是Java虚拟机运行在Client模式下默认的新生代垃圾收集器。

  3. 对应JVM参数是:-XX:+UseSerialGC
    开启后会使用:Serial(young区用)+SerialOld(Old区用)的收集器组合(参考图一)
    表示:新生代、老年代都会使用串行回收收集器,新生代使用复制算法,老年代使用标记-整理算法


3. GC之ParNew收集器


  1. ParNew(并行)收集器:使用多线程进行垃圾回收,在垃圾收集时,会Stop-the-World暂停其他所有的工作线程直到它收集结束。

  2. ParNew收集器其实就是Seria收集器新生代的并行多线程版本,最常见的应用场景是配合老年代的CMS GC工作,其余的行为和Serial收集器完全一样,ParNew垃圾收集器在垃圾收集过程中同样也要暂停所有其他的工作线程。它是很多Java虚拟机运行在Server模式下新生代的默认垃圾收集器。

  3. 常用对应JVM参数:-XX:+UseParNewGC,启用ParNew收集器,只影响新生代的收集,不影响老年代

  4. 开启上述参数后,会使用:ParNew(Young区用)+SerialOld的收集器组合,新生代使用复制算法,老年代采用标记-整理算法

  5. 但是,ParNew+Tenured这样的搭配,java8已经不再推荐:

  6. -XX:ParallelGCThreads 限制线程数量,默认开启和CPU数目相同的线程数。


4. GC之Parallel收集器


  1. Parallel Scavenge收集器类似ParNew也是一个新生代垃圾收集器,使用复制算法,也是一个并行的多线程的垃圾收集器,俗称吞吐量优先收集器。一句话:串行收集器在新生代和老年代的并行化

  2. 它重点关注的是:可控制的吞吐量〈Thoughput=运行用户代码时间/(运行用户代码时间+垃圾收集时间),也即比如程序运行100分钟,垃圾收集时间1分钟,吞吐量就是99%)。高吞吐量意味着高效利用CPU的时间,它多用于在后台运算而不需要太多交互的任务。

  3. 自适应调节策略也是ParallelScavenge收集器与ParNew收集器的一个重要区别。(自适应调节策略:虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间(-XX:MaxGCPauseMillis)或最大的吞吐量。

  4. 常用JVM参数:-XX:+UseParaIIeIGC或-XX:+UseParaIIeIOldGC(可互相激活)使用ParallelScanvenge收集器开启该参数后:新生代使用复制算法,老年代使用标记·整理算法

  5. 补充:
    -XX:ParaIIeIGCThreads=数字N,表示启动多少个GC线程
    cpu>8,N=5/8
    cpu<8,N=实际个数


5. GC之ParallelOld收集器

  1. ParallelOld收集器是ParaScavenge的老年代版本,使用多线程的标记-整理算法,Parallel Old收集器在JDKI.6才开始提供。

  2. 在JDK1.6之前,新生代使用ParallelScavenge收集器只能搭配年老代的SerialOld收集器,只能保证新生代的吞吐量优先,无法保证整体的吞吐量。

  3. ParallelOld正是为了在年老代同样提供吞吐量优先的垃圾收集器,如果系统对吞吐量要求比较高,JDK1.8后可以优先考虑新生代ParallelScavenge和年老代Parallel Old收集器的搭配策略。在JDK1.8及后(Parallel Scavenge+Parallel Old)

  4. JVM常用参数:
    -XX:+UseParallelOldGC使用ParallelOld收集器,设置该参数后,新生代Parallel+老年代ParallelOld

6. GC之CMS收集器

GC之CMS收集器和目录下的内容,篇幅限制,放在另一篇博客具体讲:GC之7大垃圾收集器详解(下)

GC之7大垃圾收集器详解(上)相关推荐

  1. GC之7大垃圾收集器详解(下)

    GC之7大垃圾收集器详解 目录 GC之CMS收集器 GC之SerialOld收集器 GC之如何选择垃圾收集器 GC之G1收集器 第一部分请参见: GC之7大垃圾收集器详解(上) 6. GC之CMS收集 ...

  2. G1 垃圾收集器详解

    Garbage First(简称G1)收集器开创了收集器面向局部收集的设计思路和基于Region的内存布局形式.它是一款专门针对于拥有多核处理器和大内存的机器的收集器,在满足了GC响应时间的延迟可控的 ...

  3. CMS垃圾收集器详解

    概述 CMS垃圾收集器是一款优秀的老年代并发垃圾收集器,通过与用户线程并发执行的方式减少GC停顿的时间.本文主要聊一下CMS设计到的相关的数据结构.具体的执行过程.运行中会出现的异常情况. 在CMS之 ...

  4. (七)Java垃圾收集器详解

    面试官问:Java垃圾收集器了解过多少,说一下 JVM 有哪些垃圾回收器?这些问题在你面试高级Java的时候经常会问到.本篇文章结合着[深入理解Java虚拟机]一书当中整理了本篇博客. 如果想要对收集 ...

  5. CMS、G1垃圾收集器详解

    CMS垃圾收集器 基本上只能用在老年代,很长一段时间是ParNew(新生代)搭配CMS(老年代)来使用的. 收集过程大概会分为如下4个过程: 1.初始标记: 暂停所有的其他线程,并记录下gc root ...

  6. java 垃圾收集器_JVM垃圾收集器详解

    说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物.事实上,GC的历史远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态 ...

  7. 深入理解Java虚拟机——JVM垃圾回收机制和垃圾收集器详解

    一:概述 说起垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,顾名思义,垃圾回收就是释 ...

  8. CMS垃圾收集器详解(转载)

    文章目录 概念 CMS的GC过程 初始标记 并发标记 并发预处理 重新标记 并发清除 CMS的缺点 总结: 概念 CMS全称为Concurrent Mark Sweep,即 并发标记清除,对比其他的收 ...

  9. JVM垃圾收集器详解 CMS、G1、Shenandoah、ZGC

    上一篇我们讲解了一些垃圾回收的理论和一些基础的算法和思想,这一篇主要是jvm从古至今垃圾收集器的实现. 各垃圾回收器 注:有连线的代表他们可以互相配合使用. Serial和Serial Old收集器 ...

最新文章

  1. 关于类、方法、对象(实例):静态方法
  2. r语言中mpg数据_R语言数据筛选整理包dplyr
  3. 【组合数学】生成函数 ( 移位性质 )
  4. C++ 中有大量的函数用来操作以‘\0‘结尾的字符串
  5. 【聚类算法】常见聚类算法总结
  6. Java IO: 字节和字符数组
  7. git使用.gitignore 忽略文件和忽略已经提交过的文件
  8. 牛客网Java刷题知识点之为什么HashMap和HashSet区别
  9. C# NamePipe使用小结
  10. 在Eclipse4.2 4.3 中安装最新版插件 WindowsBuilder swt
  11. JS获取IP地址信息,以及设备信息
  12. 如何用python快速的搭建一个websocket服务器?
  13. 异构群体机器人协作任务分配(群体智能论文学习)
  14. 服务器开发macbook综述
  15. 让mysql支持emoji表情_让MySQL支持Emoji表情 mysql 5.6
  16. icloud 照片导出_如何将iCloud照片用作Apple TV的屏幕保护程序
  17. 【Rust日报】 2019-07-29:关于创建「更小的」Rust的思考
  18. 走进JavaWeb技术世界8:浅析Tomcat9请求处理流程与启动部署过程
  19. SQL--数据库引擎优化顾问功能
  20. 数据库工程师职业规划

热门文章

  1. python exception的传递
  2. Socket-Client通信
  3. JS求多个数组的重复数据
  4. 已知二叉树先序和中序遍历结果,求后序遍历结果
  5. 分析脚本文件AndroidInitProcess分析心得(1)
  6. 八部委宰割C类电商 消费者必遭殃
  7. HDU多校5 - 6816 Boring Game(模拟)
  8. 2019ICPC(徐州) - Loli, Yen-Jen, and a cool problem(广义后缀自动机)
  9. CodeForces - 501C Misha and Forest(拓扑排序)
  10. 计算机学院志愿公益活动,计算机学院开展学雷锋主题公益活动