JVM学习笔记(6)---垃圾收集器

作者: 18587a1108f1 | 来源:发表于2018-09-06 18:05 被阅读3次

垃圾收集算法 是内存回收的 方法垃圾收集器 则是内存回收的 实现
收集器没有最好的没有万能的,只有最合适的。

垃圾收集器
图中展示了JDK8之后,HotSpot所有虚拟机的收集器:
  • 7种不同分代的收集器:
    新生代收集器: Serial、ParNew、Parallel Scavenge
    老年代收集器: CMS、Serial Old、Parallel Old
    整堆收集器: G1
  • 两个收集器间有连线,表明可以搭配使用

Minor GC与 Full GC

Minor GC又称为新生代GC
因为新生代对象大多朝生夕灭,所以Minor GC发生频繁,回收速度快
Full GC/Major GC又称为老年代GC
发生经常会伴随至少依次Minor GC。回收速度慢,比Minor GC慢10倍以上

Serial收集器

Serial收集器是最基本、发展历史最悠久的收集器。

Serial收集器工作流程
特点:
  • 针对新生代
  • 采用复制算法
  • 单线程收集器,GC时暂停所有其他工作线程Stop The World,“都给我停!”)

优点: 简单而高效(与其他单线程收集器相比)

  • 对于限定单个CPU的环境来说,Serial收集器没有线程交互(切换)开销,可以获得最高的单线程收集效率
  • 在桌面应用场景下,分配给虚拟机的内存不大,收集几十兆新生代内存可控制在几十毫秒内,停顿可以接受

缺点: 停顿导致用户体验差
应用: 是HotSpot在Client模式下的默认的新生代收集器。
参数:
+XX:+UseSerialGC:使用串行收集器。

ParNew收集器

ParNew收集器是Serial收集器的多线程版本。

ParNew收集器工作流程
特点:
  • 针对新生代
  • 采用复制算法
  • 多线程并行
  • 与Serial共有了很多代码,行为、特点和Serial收集器一样

并行(Parallel)并发(Concurrent)
并行:多条垃圾收集线程同时工作,用户线程处于等待。如ParNew、Parallel Scavenge、Parallel Old。
并发:用户线程与垃圾收集线程同时执行(不一定并行,可能交替执行),用户程序在继续运行,而垃圾收集程序运行在另一个CPU上。如CMS、G1。

应用:
虚拟机在Server模式下的首选收集器。
因为除Serial外,只有ParNew收集器可以和CMS配合工作

因为Parallel Scavenge收集器以及G1收集器没有使用传统GC收集器代码框架,而是独立实现。而CMS与ParNew等其余收集器则共用部分框架代码

参数:
"-XX:+UseConcMarkSweepGC":指定使用CMS后,会默认使用ParNew作为新生代收集器。
"-XX:+UseParNewGC":强制使用ParNew。
"-XX:ParallelGCThreads":并行线程数量。

Parallel Scanvenge收集器

Parallel Scavenge收集器也被称为 “吞吐量优先” 收集器。

Parallel Scavenge收集器工作流程

特点:

  • 针对新生代
  • 采用复制算法
  • 多线程并行
  • GC时目标为达到一个可控制的吞吐量(Throughput)

吞吐量 = 用户代码运行时间 / ( 用户代码运行时间 + 垃圾收集时间 )
高吞吐量可以高效利用CPU时间,尽快完成程序运算,主要适合在后台运算而不需要太多交互的任务。

参数:
"-XX:MaxGCPauseMillis":设置最大GC停顿时间。数值越小,GC越频繁,吞吐量越小。
"-XX:GCTimeRatio":设置GC占总时间的比率。默认GC时间权重为1,参数设定用户代码运行时间权重n。吞吐量计算方式为 n / (1 + n)。
"-XX:UseAdaptiveSizePolicy":动态调节新老生代参数,以提供合适的停顿时间或最大吞吐量。即GC自适应调节策略

Serial Old收集器

Serial Old收集器是Serial收集器的老年代版本。

Serial Old收集器工作流程

特点:

  • 针对老年代
  • 采用”标记-整理“算法(Mark-Compact)
  • 单线程收集

应用:
主要用于Client模式
Server模式下,JDK1.5之前,用于搭配Parallel Scavenge使用;作为CMS的后备,在并发收集发生Concurrent Mode Failure时使用。

Parallel Old收集器

Parallel Old垃圾收集器是Parallel Scavenge收集器的老年代版本。

Parallel Old收集器工作流程

特点:

  • 针对老年代
  • 采用”标记-整理“算法(Mark-Compact)
  • 多线程收集

参数:
"-XX:+UseParallelOldGC":指定使用Parallel Old收集器
应用:
主要用于Server模式多CPU情况。
JDK1.6之后,接替Serial Old作为Parallel的搭配;在注重吞吐量以及CPU资源敏感的场景,就有了Parallel Scavenge加Parallel Old收集器的"给力"应用组合。

其他

又有事烦我了,先写到这,有时间继续。

相关文章

  • JVM学习笔记(6)---垃圾收集器

    垃圾收集算法 是内存回收的 方法,垃圾收集器 则是内存回收的 实现。收集器没有最好的没有万能的,只有最合适的。 7...

  • G1收集器详解

    详解 JVM Garbage First(G1) 垃圾收集器 G1垃圾收集器入门

  • 2020互联网Java后端面试专题解析—JVM21题

    前言 文章对 JVM 内存区域分布、JVM 内存溢出分析、JVM 垃圾回收算法/垃圾收集器、JVM 性能调优工具及...

  • 5种JVM垃圾收集器特点和8种JVM内存溢出原因

    先来看看5种JVM垃圾收集器特点 一、常见垃圾收集器 现在常见的垃圾收集器有如下几种: 新生代收集器: Seria...

  • JVM学习笔记(3)-垃圾收集算法

    JVM学习笔记(1)-内存管理机制 JVM学习笔记(2)-内存分配与回收 垃圾收集算法 JVM垃圾收集算法有四种:...

  • Jvm之CMS垃圾收集器

      这篇文章主要介绍JVM的CMS垃圾收集器,以及JVM提供的垃圾收集算法。 一、垃圾收集算法   JVM提供的三...

  • JVM之ParNew和CMS日志分析

    在两年前的文章 JVM 学习——垃圾收集器与内存分配策略中,已经对 GC 算法的原理以及常用的垃圾收集器做了相应的...

  • GC - 收集器

    概述 垃圾收集器是垃圾回收算法的具体实现,不同商家、不同版本的 JVM 所提供的垃圾收集器可能会有差别 收集器组合...

  • JVM源码分析系列

    JVM G1算法系列 G1垃圾收集器介绍 G1垃圾收集器之RSet G1垃圾收集器之SATB G1垃圾收集器之对象...

  • JVM垃圾回收

    JVM垃圾收集器 一、垃圾收集器的分类 1.1 Serial GC 出现的最早,比较古老,最大的特点就是垃圾收集策...

网友评论

    本文标题:JVM学习笔记(6)---垃圾收集器

    本文链接:https://www.haomeiwen.com/subject/jvcdwftx.html