JVM——垃圾回收器(Serial,SerialOld,ParNew,CMS,Parallel Scavenge,Parallel Old)

目录

  • 1.垃圾回收器的组合关系
    • 1.年轻代-Serial垃圾回收器
    • 2.老年代-SerialOld垃圾回收器
    • 3.年轻代-ParNew垃圾回收器
    • 4.老年代- CMS(Concurrent Mark Sweep)垃圾回收器
      • CMS执行步骤:
      • CMS垃圾回收器存在的问题缺点:
      • CMS垃圾回收器存在的问题 – 线程资源争抢问题
    • 5.年轻代-Parallel Scavenge垃圾回收器
    • 6.老年代-Parallel Old垃圾回收器

为什么分代GC算法要把堆分成年轻代和老年代?
在这里插入图片描述

⚫ 系统中的大部分对象,都是创建出来之后很快就不再使用可以被回收,比如用户获取订单数据,订单数据返回给用户之后就可以释放了。
⚫ 老年代中会存放长期存活的对象,比如Spring的大部分bean对象,在程序启动之后就不会被回收了。
⚫ 在虚拟机的默认设置中,新生代大小要远小于老年代的大小

分代GC算法将堆分成年轻代和老年代主要原因有:
1、可以通过调整年轻代和老年代的比例来适应不同类型的应用程序,提高内存的利用率和性能。
2、新生代和老年代使用不同的垃圾回收算法,新生代一般选择复制算法,老年代可以选择标记-清除和标记-整理算法,由程序员来选择灵活度较高。
3、分代的设计中允许只回收新生代(minor gc),如果能满足对象分配的要求就不需要对整个堆进行回收(full gc),STW时间就会减少。
在这里插入图片描述

1.垃圾回收器的组合关系

垃圾回收器是垃圾回收算法的具体实现。
由于垃圾回收器分为年轻代和老年代,除了G1之外其他垃圾回收器必须成对组合进行使用。
具体的关系图如下:在这里插入图片描述

1.年轻代-Serial垃圾回收器


Serial是是一种单线程串行回收年轻代的垃圾回收器
在这里插入图片描述
在这里插入图片描述

2.老年代-SerialOld垃圾回收器

SerialOld是Serial垃圾回收器的老年代版本,采用单线程串行回收
-XX:+UseSerialGC 新生代、老年代都使用串行回收器。

在这里插入图片描述
在这里插入图片描述

3.年轻代-ParNew垃圾回收器

ParNew垃圾回收器本质上是对Serial在多CPU下的优化,使用多线程进行垃圾回收.
-XX:+UseParNewGC 新生代使用ParNew回收器, 老年代使用串行回收器

A
在这里插入图片描述

4.老年代- CMS(Concurrent Mark Sweep)垃圾回收器

CMS垃圾回收器关注的是系统的暂停时间,
允许用户线程和垃圾回收线程在某些步骤中
同时执行,减少了用户线程的等待时间。

参数:XX:+UseConcMarkSweepGC在这里插入图片描述
在这里插入图片描述

CMS执行步骤:

1.初始标记,用极短的时间标记出GC Roots能直接关联到的对象。
2.并发标记, 标记所有的对象,用户线程不需要暂停。
3.重新标记,由于并发标记阶段有些对象会发生了变化,存在错标、漏标等情况,需要重新标记。
4.并发清理,清理死亡的对象,用户线程不需要暂停。在这里插入图片描述

CMS垃圾回收器存在的问题缺点:

1、CMS使用了标记-清除算法,在垃圾收集结束之后会出现大量的内存碎片,CMS会在Full GC时进行碎片的整理。这样会导致用户线程暂停,可以使XX:CMSFullGCsBeforeCompaction=N 参数(默认0)调整N次Full GC之后再整理。
2.、无法处理在并发清理过程中产生的“浮动垃圾”,不能做到完全的垃圾回收。
3、如果老年代内存不足无法分配对象,CMS就会退化成Serial Old单线程回收老年代。
在这里插入图片描述

CMS垃圾回收器存在的问题 – 线程资源争抢问题

⚫ 在CMS中并发阶段运行时的线程数可以通过-XX:ConcGCThreads参数设置,默认值为0,由系统计算得出。
⚫ 计算公式为(-XX:ParallelGCThreads定义的线程数 + 3) / 4,ParallelGCThreads是STW停顿之后的并行线程数在这里插入图片描述
⚫ ParallelGCThreads是由处理器核数决定的:
1、当cpu核数小于8时,ParallelGCThreads = CPU核数
2、否则 ParallelGCThreads = 8 + (CPU核数 – 8 )*5/8在这里插入图片描述
在这里插入图片描述
⚫ 由于CPU的核心数有限,就会影响用户线程执行的性能。在这里插入图片描述

CMS垃圾回收器关注的是系统的暂停时间, 允许用户线程和垃圾回收线程在某些步骤中 同时执行,减少了用户线程的等待时间。

参数:-XX:+UseConcMarkSweepGC在这里插入图片描述
在这里插入图片描述

5.年轻代-Parallel Scavenge垃圾回收器

Parallel Scavenge是JDK8默认的年轻代垃圾回收器,
多线程并行回收,关注的是系统的吞吐量。具备自动
调整堆内存大小的特点。在这里插入图片描述
在这里插入图片描述

Parallel Scavenge允许手动设置最大暂停时间和吞
吐量。
Oracle官方建议在使用这个组合时,不要设置堆内存
的最大值,垃圾回收器会根据最大暂停时间和吞吐量
自动调整内存大小。
在这里插入图片描述

6.老年代-Parallel Old垃圾回收器

Parallel Old是为Parallel Scavenge收集器
设计的老年代版本,利用多线程并发收集

参数: -XX:+UseParallelGC 或
-XX:+UseParallelOldGC可以使用
Parallel Scavenge + Parallel Old这种组合。
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【教学类-06-12】20231126 (二)三位数 如何让加减乘除题目从小到大排序(以0-110之间加法为例,做正序排列用)

结果展示 背景需求: 二位数:去0 三位数(需要排除很多0) 解决思路 一、把数字改成三位数 二、对数组内的题目,8种可能性进行去“0”处理 1、十位数(去百位数0)十位数(去百位数0&am…

AMD ROCm软件栈组件介绍

AMD ROCm™ Platform 1.1 ROCm简介 参考:https://github.com/RadeonOpenCompute/ROCm ROCm(Radeon Open Compute)开源软件栈。 在NVIDIA GPU上,术语“CUDA”通常是指GPU编程编译器、API和运行时库,但ROCm不那么单一…

【云备份】数据管理模块

文章目录 1. 数据管理模块要管理什么数据?2. 数据管理模块如何管理数据?3. 数据管理模块的具体实现BackupInfo 数据信息类NewBackupInfo —— 获取各项属性信息 DataManager 数据管理类构造函数析构函数insert —— 新增update —— 修改GetOneByURL——…

C语言--每日选择题--Day24

第一题 1. 在C语言中,非法的八进制是( ) A:018 B:016 C:017 D:0257 答案及解析 A 八进制是0~7的数字,所以A错误 第二题 2. fun((exp1,exp2),(exp3,exp4,exp5))有几…

网络通信(架构与三要素)

一,通信架构 二,三要素 三,IP地址 四,域名 五,InetAddress(操作IP地址的工具类) 六,案例 import java.net.InetAddress; import java.net.UnknownHostException;public class IPInet…

华为的数字化转型(9)——企业架构4A集成模型

企业架构(Enterprise Architecture,EA)是衔接战略与项目实施的桥梁,引入企业架构方法,可以对数字化转型愿景进行系统性的、分层分级的梳理和解释,以便企业上下在同一张蓝图上统一认识。 企业架构提供了整体…

时间序列预测 — LSTM实现多变量多步负荷预测(Keras)

目录 1 数据处理 1.1 数据集简介 1.2 数据集处理 2 模型训练与预测 2.1 模型训练 2.2 模型多步预测 2.3 结果可视化 1 数据处理 1.1 数据集简介 实验数据集采用数据集6:澳大利亚电力负荷与价格预测数据(下载链接),包括数…

嵌入式FPGA IP正在发现更广阔的用武之地

作者:郭道正, Achronix Semiconductor中国区总经理 在日前落幕的“中国集成电路设计业2023年会暨广州集成电路产业创新发展高峰论坛(ICCAD 2023)”上,Achronix的Speedcore™嵌入式FPGA硅知识产权(eFPGA IP&#xff09…

5. 链表

内存空间是所有程序的公共资源,在一个复杂的系统运行环境下,空闲的内存空间可能散落在内存各处。我们知道,存储数组的内存空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间。此时链表的灵活性优势…

计算机组成原理-虚拟存储器

文章目录 虚拟存储系统页式虚拟存储器存储器的层次化结构段式虚拟存储器段页式虚拟存储器 虚拟存储系统 将辅存中程序部分调入内存,程序其他待分待需要再调入内存 页式虚拟存储器 将辅存中的程序分页,将当前用得到的程序的页调入到主存中。 外存块号…

文献速递:超声影像人工智能专题文献分享

文献速递:超声影像人工智能专题文献分享 01 文献速递介绍 本文综述了超声影像组学在甲状腺疾病研究中的应用及其局限性。近年来,甲状腺疾病的发病率逐渐增加,传统超声是最关键的甲状腺成像方法之一,但仍存在一定局限性。超声影…

【青蛙跳台阶问题 —— (三种算法)】

青蛙跳台阶问题 —— (三种算法) 一.题目介绍1.1.题目1.2.图示 二.解题思路三.题解及其相关算法3.1.递归分治法3.2.动态规划算法(Dynamic Programming)3.3.斐波那契数列法 四.注意细节 一.题目介绍 1.1.题目 一只青蛙一次可以跳上1级台阶&am…

pinia从入门到使用

pinia: 比vuex更适合vue3的状态管理工具,只保留了vuex 原有的 state, getters,actions 作用等同于 data computed methods,可以有多个 state 1.安装创建导入 安装:npm install pinia 或 yarn add pinia 创建stores/index.js inde…

亚马逊云科技实现了奇瑞捷豹路虎SAP系统的上云目标并保持成本优化

11月23日,“2023第八届IDC中国数字化转型年度盛典”正式开启并揭晓“2023 IDC中国未来企业大奖-卓越奖”获奖企业,奇瑞捷豹路虎汽车有限公司(以下简称“奇瑞捷豹路虎”)凭借“基于云原生的智慧化运营平台”项目,继获得…

HTTP协议发展

HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC) 每一代HTTP解决了什么问题? 下图说明了主要功能。 HTTP 1.0 于 1996 年最终确定并完整记录。对同一服务器的每个请求都需要单独的 TCP 连接。 HTTP 1.1 于 1997 年发布。TCP 连接可以保持打开状态…

基于Springboot的墙绘产品展示交易平台(有报告),Javaee项目,springboot项目。

演示视频: 基于Springboot的墙绘产品展示交易平台(有报告),Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller&#xff0…

在Windows上配置MySql开发java,导入JDBC的jar包后连接SQL Server数据库结合Java和MySql的一些简单实践

在Windows上配置MySql 我们先进入MySql官网 在官网中选择MySQL Installer for Windows 进入后选择第一个下载 接下来安装即可,在安装时,可以只安装MySql Server(默认选项),选择Full也可,这样会同时安装workbench以及…

IDEA中Tomcat启动web项目

1.首先【Run】-->【Edit Configurations】,进入对应功能界面 2.点击左上角【】,选择Tomcat Server -->Local 3.Name输入自己中意的,下面两个port,保证没被占用就行 4.切到【Deployment】页签,点击【】&#xff…

Python入门04字符串

目录 1 字符串的定义2 转义字符3 字符串的常见方法4 分割字符串5 字符串反转6 字符串的链式调用7 格式化字符串8 多行字符串总结 1 字符串的定义 在Python中,字符串表示一个字符的序列,比如 str "hello,world"这里我们定义了一个字符串&…

如何往excel中写子表?

with pd.ExcelWriter("C:/last_date.xlsx") as writer:for i in range(0, 10):df pd.DataFrame()df.to_excel(writer, indexFalse, sheet_namestr(days[i 1]))