06-GC垃圾收集器有那些?

news2024/11/19 8:37:31

如图展示了HotSpot虚拟机中7种不同的垃圾收集, 连线代表两者可搭配使用
在这里插入图片描述

1.Serial 垃圾收集器(单线程、复制算法)

在这里插入图片描述

Serial(英文连续)是最基本垃圾收集器,使用复制算法,曾经是JDK1.3.1 之前新生代唯一的垃圾收集器。Serial 是一个单线程的收集器,它不但只会使用一个 CPU 或一条线程去完成垃圾收集工作,并且在进行垃圾收集的同时,必须暂停其他所有的工作线程,直到垃圾收集结束。

Serial 垃圾收集器虽然在收集垃圾过程中需要暂停所有其他的工作线程,但是它简单高效,对于限定单个 CPU 环境来说,没有线程交互的开销,可以获得最高的单线程垃圾收集效率,因此 Serial垃圾收集器依然是 java 虚拟机运行在 Client 模式下默认的新生代垃圾收集器.

2.ParNew 垃圾收集器(Serial+多线程)

在这里插入图片描述

ParNew 垃圾收集器其实是 Serial 收集器的多线程版本,也使用复制算法,除了使用多线程进行垃圾收集之外,其余的行为和 Serial 收集器完全一样,ParNew 垃圾收集器在垃圾收集过程中同样也要暂停所有其他的工作线程。

ParNew 收集器默认开启和 CPU 数目相同的线程数,可以通过-XX:ParallelGCThreads 参数来限制垃圾收集器的线程数.

ParNew虽然是除了多线程外和Serial 收集器几乎完全一样,但是ParNew垃圾收集器是很多 java虚拟机运行在 Server 模式下新生代的默认垃圾收集器。

3.Parallel Scavenge 收集器(多线程复制算法、高效)

在这里插入图片描述

Parallel Scavenge 收集器也是一个新生代垃圾收集器,同样使用复制算法,也是一个多线程的垃圾收集器,它重点关注的是程序达到一个可控制的吞吐量(Thoughput,CPU 用于运行用户代码的时间/CPU 总消耗时间,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)),高吞吐量可以最高效率地利用 CPU 时间,尽快地完成程序的运算任务,主要适用于在后台运算而不需要太多交互的任务。

自适应调节策略也是 ParallelScavenge 收集器与 ParNew 收集器的一个重要区别。

4.Serial Old 收集器(单线程标记整理算法 )

在这里插入图片描述

Serial Old 是 Serial 垃圾收集器年老代版本,它同样是个单线程的收集器,使用标记-整理算法,这个收集器也主要是运行在 Client 默认的 java 虚拟机默认的年老代垃圾收集器。

在 Server 模式下,主要有两个用途:

  1. 在 JDK1.5 之前版本中与新生代的 Parallel Scavenge 收集器搭配使用。
  2. 作为年老代中使用 CMS 收集器的后备垃圾收集方案。

5.Parallel Old 收集器(多线程标记整理算法)

在这里插入图片描述
Parallel Old 收集器是Parallel Scavenge的年老代版本,使用多线程的标记-整理算法,在 JDK1.6
才开始提供。

在 JDK1.6 之前,新生代使用 ParallelScavenge 收集器只能搭配年老代的 Serial Old 收集器,只
能保证新生代的吞吐量优先,无法保证整体的吞吐量,Parallel Old 正是为了在年老代同样提供吞
吐量优先的垃圾收集器,如果系统对吞吐量要求比较高,可以优先考虑新生代 Parallel Scavenge
和年老代 Parallel Old 收集器的搭配策略。

6.CMS 收集器(多线程标记清除算法)

Concurrent mark sweep(CMS)收集器是一种老年代垃圾收集器,其最主要目标是获取最短垃圾回收停顿时间,和其他老年代使用标记-整理算法不同,它使用多线程的标记-清除算法。最短的垃圾收集停顿时间可以为交互比较高的程序提高用户体验。

CMS 工作机制相比其他的垃圾收集器来说更复杂,整个过程分为以下 4 个阶段:

1.初始标记
只是标记一下 GC Roots 能直接关联的对象,速度很快,仍然需要暂停所有的工作线程。

2.并发标记
进行 GC Roots 跟踪的过程,和用户线程一起工作,不需要暂停工作线程。

3.重新标记
为了修正在并发标记期间,因用户程序继续运行而导致标记产生变动的那一部分对象的标记
记录,仍然需要暂停所有的工作线程。

4.并发清除
清除 GC Roots 不可达对象,和用户线程一起工作,不需要暂停工作线程。由于耗时最长的并发标记和并发清除过程中,垃圾收集线程可以和用户现在一起并发工作,所以总体上来看CMS 收集器的内存回收和用户线程是一起并发地执行。

7.G1 收集器

在这里插入图片描述

Garbage first 垃圾收集器是目前垃圾收集器理论发展的最前沿成果,相比与 CMS 收集器,G1 收
集器两个最突出的改进是:

  1. 基于标记-整理算法,不产生内存碎片。
  2. 可以非常精确控制停顿时间,在不牺牲吞吐量前提下,实现低停顿垃圾回收。G1 收集器避免全区域垃圾收集,它把堆内存划分为大小固定的几个独立区域,并且跟踪这些区域的垃圾收集进度,同时在后台维护一个优先级列表,每次根据所允许的收集时间,优先回收垃圾最多的区域。区域划分和优先级区域回收机制,确保 G1 收集器可以在有限时间获得最高的垃圾收集效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【基础】Flink -- DataStream API

Flink -- DataStream API执行环境 Execution Environment创建执行环境设置执行模式触发程序执行源算子 Source从集合中读取数据从文件读取数据从 Socket 读取数据自定义数据源转换算子 Transformation基本转换算子映射 map过滤 filter扁平映射 flatMap聚合算子 Aggregation按键…

WPS配置mathtype

笔者电脑软件版本:WPS Office mathtype_7.4.8.0 请注意WPS适配的mathtype版本。 下载地址 mathtype_7.4.8.0:https://wwl.lanzoum.com/iuJDz0guffuh wps.vba.exe:https://handong1201.lanzouw.com/iX5GZtn70pe(mathtype右侧选…

查找算法之线性查找

目录 线性查找 算法实现 算法实现 python C 复杂度分析 优点与缺点 线性查找 线性查找(Linear Search)是一种最基础的查找方法,其从数据结构的一端开始,依次访问每个元素,直到另一端后停止。 算法实现 线性查…

【凸优化】Gradient Descent and Newton Descent【梯度下降法和牛顿下降法】(含Python代码绘制等高线图)

文章目录Gradient Descent and Newton Descent一、下降法【Descent】二、梯度下降法【Gradient Descent】三、牛顿下降法【Newton Descent】四、示例Example五、ReferenceGradient Descent and Newton Descent 一、下降法【Descent】 首先介绍什么是下降法【Descent Methods】…

【Git】下载安装学习记录

【下载安装】 1.官网下载64位的安装包 2.双击安装,设置安装路径,一路next即可 使用学习指南:一、设置用户签名二、操作本地库的命令git initgit statusgit add 文件名git rm --cached 文件名git commit -m "注释" 文件名git refl…

在PyCharm中配置Anaconda环境

目录 1.创建项目 2.设置解释器 ​​​​​​ 3.常见问题 1.创建项目 2.设置解释器 3.常见问题 1.%matplotlib inline报错:Python关于%matplotlib inline 2.from d2l import torch as d2l报错: 报错原因,没有导入d2l这个包 如何导入呢&…

JDK8下载安装与配置环境变量(linux)

一、前言 基于Linux平台的MySQL安装文件有三个版本,分别是RPM软件、GenericBinaries软件包、源码包,具体介绍如下: ①RPM软件包是一种Linux平台下的安装文件,通过相关命令可以很方便地安装与卸载。该软件包分为两个:…

SVF Saber的实现

SVF Saber1.基本原理2.API类型定义3.Memory Leak Checker3.1.示例3.2.初始化3.3.程序切片3.4.路径约束求解3.5.报告错误4.总结5.参考文献Saber是一个静态漏洞检测器,最初集成到open64中,现已集成到SVF中,主要检测内存泄漏,DoubleF…

GAN的损失函数

1.GAN 在训练过程中,生成器和判别器的目标是相矛盾的,并且这种矛盾可以体现在判别器的判断准确性上。生成器的目标是生成尽量真实的数据,最好能够以假乱真、让判别器判断不出来,因此生成器的学习目标是让判别器上的判断准确性越来…

PCL点云处理之快速点特征直方图(FPFH)描述符(八十六)

PCL点云处理之快速点特征直方图(FPFH)描述符(八十六) 前言一、快速点特征直方图理论二、FPFH和PFH的区别二、实验过程1.代码2输入法线的NAN值检查用 OpenMP 加速 FPFH前言 对于具有 n 个点的给定点云 P,点特征直方图(见点特征直方图(PFH)描述符)的理论计算复杂度为 O (nk…

VueRouter路由的使用(上)

文章目录VueRouter路由的使用p21路由的原理_hash改变historyP22 认识vue-router路由的基本使用流程默认路径router-link路由懒加载路由的其他属性动态路由的基本匹配NotFound路由嵌套编程式导航VueRouter路由的使用 p21 路由的原理_hash改变 <!DOCTYPE html> <html …

JavaScript 运算符

文章目录JavaScript 运算符JavaScript 算术运算符JavaScript 赋值运算符用于字符串的 运算符对字符串和数字进行加法运算JavaScript 运算符 运算符 用于赋值。 运算符 用于加值。 运算符 用于给 JavaScript 变量赋值。 算术运算符 用于把值加起来。 实例 指定变量值&am…

Java基础学习笔记(十)—— 异常

异常1 异常概述2 异常处理方式2.1 JVM默认处理异常的方式2.2 throws方式处理异常2.3 throw抛出异常2.4 try-catch方式处理异常2.5 Throwable成员方法2.6 异常的练习3 自定义异常1 异常概述 异常&#xff1a;就是程序出现了不正常的情况。程序在执行的过程中&#xff0c;出现的…

Vivado综合设置之-gated_clock_conversion

本文验证-gated_clock_conversion设置为on或off时&#xff0c;给Schematic带来的差异。 -gated_clock_conversion设置为on时&#xff0c;用于移除门控时钟&#xff0c;门控时钟是由门电路而非专用时钟模块&#xff08;例如MMCM或PLL&#xff09;生成的时钟。 门控时钟会对设计…

Java-集合(3)

Vector集合类 1.Vector底层保存数据的也是一个对象数组&#xff1a;protected Object[] elementDate; 2.Vector是线程同步的&#xff0c;也就是线程安全Vactor的操作方法都带有synchronized修饰。以此可以进行安全线程保障&#xff0c;所以在开发中如果确认只有一个线程操作集…

dubbo学习笔记3(小d课堂)

dubbo高级特性 启动依赖检查 我们现在直接来启动我们的消费者&#xff1a; 它会报错。 我们 再去直接运行我们的消费者就不会报错。 我们也可以不在代码中去配置&#xff1a; 实际工作中比较建议使用这种方式。 dubbo.reference.check是配置所有的reference里的service都是f…

C语言:大小端

大小端 对于整型来说&#xff0c;内存中存放的是补码&#xff0c;补码是按大小端模式进行存储&#xff1a; 大端存储数据低位存在内存高地址&#xff0c;高位存在内存低地址小端存储数据低位存在内存低地址&#xff0c;高位存在内存高地址 记忆方法 小小小&#xff1a;数据 小…

前端组件库自定义主题切换探索-01

探索原因背景 首先自然是项目有需求&#xff0c;这是必须去做的原因 其次&#xff0c;是我们项目没有直接使用市面上现成的基于element-ui或者ant-design的第三方UI框架&#xff0c;比如avue&#xff0c;而是有着自己的UI组件库 第三&#xff0c;我们的组件库基于ant-design-v…

Win10下干净卸载VMware15.5

一、说明 虚拟机属于服务软件&#xff0c;在Windows10下卸载实属不易。下面请看我所总结的卸载文档。 二、如何彻底卸载VMware虚拟机 需要删除的部分很多&#xff0c;包括&#xff1a; 三、删除步骤一&#xff1a;需要禁用VM虚拟机服务 首先&#xff0c;因为VM的软件属于底层…

【自学Python】Python转义字符

文章来源嗨客网&#xff08;www.haicoder.net&#xff09; Python转义字符 Python转义字符教程 在编程中有一些字符是打不出来的&#xff0c;比如换行&#xff0c;提示音&#xff0c;下一个制表位等等&#xff0c;于是程序语言的开发者就设计了转义序列&#xff08;escape se…