JVM垃圾收集器和性能调优

目标:

1.JVM垃圾收集器有哪几种?

2.CMS垃圾收集器回收步骤。

一、JVM常见的垃圾回收器

为什么垃圾回收的时候需要STW?

标记垃圾的时候,如果不STW,可能用户线程就会不停的产生垃圾。 

1.1 单线程收集

Serial和SerialOld使用单线程收集

开启参数 -XX:+UserSerialGC

1.2 多线程收集

ParallaNew和ParallaOld采用的多线程收集。

-XX:MaxGCPauseMillis=time 控制垃圾收集的暂停时间。

-XX:GCTimeRatio: 默认99,垃圾回收时间占总时间的大小。吞吐量优先。

PS组合(Paralla Scavenge+ Paralla Old组合),吞吐量优先,空间自适应调整。

200M空间不足,GC后自适应调整为250M。

扩容:伴随着GC,新生代自动扩容。两个参数:

MaxHeapFreeRatio: GC后,最大堆空间剩余比例,缩容。

MinHeapFreeRatio: GC后,最小堆空间剩余空间大小。扩容

堆空间设置为-Xms == -Xmx, 保持一个稳定的堆。

吞吐优先--》响应优先

1.3 响应优先垃圾回收器

CMS是第一款响应优先的垃圾回收器。

二、CMS垃圾回收器

CMS是针对老年代的垃圾收集器。

2.1 初始标记

  • 只标记与GC Roots直接相关连的对象
  • 需要STW

标记对象不是很多。

2.2 并发标记

继续完成标记,对并发标记的对象,继续进行标记,这是比较耗时的操作,不进行STW。 

2.3 重新标记

并发标记因为是并发执行的,此时用户线程可能重新修改了标记对象,因此需要STW,暂停用户线程,对 并发标记阶段变化的对象进行重新标记。

2.4 并发清除

CMS为什么能够做到并打清除呢?

因为CMS采用的是标记清除算法,清理垃圾时存活对象不会发生移动,因此引用地址没有变化,不需要进行STW。

2.5 预清理和并发可中断预清理

 

在并发标记和重新标记中,插入两个阶段:预清理和并发可中断预清理。

为什么能够插入?

并发标记不暂停(STW),我们要尽量缩短STW时间(重新标记时间),因此在并发阶段做的事情越多越好。

预清理控制参数:CMSPreClieaningEnabled  CMS默认开启的。

2.5.1 预清理

1)如果新生代创建的对象A,在老年代存在跨代引用没有标记的对象B,那么B需要修改为存活状态。

2)老年代应用对象发生变化,需要标记为dirty,进行重新标记。记录类似与卡表的结构。

2.5.2 并发可中断预清理

控制参数 CMSScheduleRemarkEdenSizeThreshold 2M,Eden区存活对象达到2M。

并发标记阶段,如果From区和To区的引用对象发生跨代引用。老年代应用对象发生变化,需要标记为dirty,进行重新标记。

可中断。中断条件:

 

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

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

相关文章

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十八)- 微服务(8)

目录 11.4 SpringAMQP 11.4.2 Work Queue工作队列 11.4.3 发布订阅模型 11.4.4 FanoutExchange(广播交换机) 11.4.5 DirectExchange(路由模式交换机) 11.4.6 TopicExchange 11.5 消息转换器 11.4 SpringAMQP 父工程引入AMQP依赖 <!--AMQP依赖&#xff0c;包含RabbitMQ…

接口自动化测试做到什么程度的覆盖算是合格的

接口自动化测试的覆盖程度是一个衡量测试质量与效率的重要指标&#xff0c;其“好”的标准并非绝对&#xff0c;而是根据项目特性和团队需求动态调整的结果。然而&#xff0c;有几个原则和实践可以帮助我们确定一个相对合理的覆盖范围&#xff0c;以及为何这些覆盖是必要的。 1…

鸿蒙全栈开发-一文读懂鸿蒙同模块不同模块下的UIAbility跳转详解

前言 根据第三方机构Counterpoint数据&#xff0c;截至2023年三季度末&#xff0c;HarmonyOS在中国智能手机操作系统的市场份额已经提升至13%。短短四年的时间&#xff0c;HarmonyOS就成长为仅次于安卓、苹果iOS的全球第三大操作系统。 因此&#xff0c;对于鸿蒙生态建设而言&a…

FatFs文件系统移植到MCU平台详细笔记经验教程

0、准备工作 在移植FatFs文件系统前&#xff0c;需要准备好一块开发板&#xff0c;和一张SD卡&#xff0c;且需要已经实现开发板正常的读写SD卡或其它硬件设备。 本文笔记教程中使用的硬件设备是STM32F407VET6开发板&#xff08;板载SD插槽&#xff09;&#xff0c;配备8G和32G…

C#知识|通过ADO.NET实现应用程序对数据库的查询操作。

哈喽,你好啊,我是雷工! 前边学习了通过ADO.NET实现C#应用程序对数据库的增、删、改操作。 接下来接着学习查询操作,以下为学习笔记。 查询返回有两种类型,一种是单行单列的单一结果,一种是结果集,首先了解查询结果是单行单列结果的写法。 01 查询返回单一结果 以前方的…

[AVL数四种旋转详细图解]

文章目录 一.右单旋二. 左单旋三. 右左双旋四. 左右双旋 一.右单旋 新节点插入较高左子树的左侧—左左&#xff1a;右单旋 由于在较高左子树的左侧插入一个节点后&#xff0c;左边插入导致30的平衡因子更新为-1&#xff0c;而60平衡因子更新为-2&#xff0c;此时不平衡&…

五大PS插件推荐,让你的设计效率翻倍!

前言 PS插件可以在繁忙的设计工作中&#xff0c;帮助设计师们快速高效地完成任务&#xff0c;是每个设计师都渴望解决的问题。这些插件不仅能够提升设计效率&#xff0c;还能让设计师的创意得到更好的展现。接下来&#xff0c;就为大家推荐五款必备的PS插件&#xff0c;让你的…

AI数字人本地算力直播怎么做?青否数字人教您快速搭建直播间!

一、青否数字人直播分为两种&#xff0c;一种是云端渲染另外一种就是本地渲染 使用本地算力来进行直播间互动&#xff0c;本地算力能够使商家拥有更低成本运营 在独立部署数字人SaaS系统后&#xff0c;其他的数字人厂商是【云服务器】【算力服务器】相结合的方式&#xff0c;以…

动态IP在云计算中的应用与优势(短效IP的作用)

一、云计算概述 云计算是指通过互联网将计算资源和服务提供给用户的一种模式。它具有高灵活性、可扩展性和成本效益等特点&#xff0c;使得企业能够快速响应市场变化&#xff0c;降低IT投入成本。云计算的核心优势在于其资源的动态分配和高效利用。 二、动态IP在云计算中的角…

JDK17语法新增特性(常用)

1、yield 关键字 yield 关键字从Java13开始引入&#xff0c;用于从case的代码块中返回值 示例&#xff1a; 正常的switch语句&#xff1a; public static void main(String[] args) {String data "one";int result 0;//接收数据的返回值switch(data) {case &quo…

2024年计算机、信息工程与大数据应用国际会议(CIEBDA 2024)

2024 International Conference on Computer, Information Engineering, and Big Data Applications 【1】大会信息 会议简称&#xff1a;CIEBDA 2024 大会地点&#xff1a;中国青岛 审稿通知&#xff1a;投稿后2-3日内通知 投稿邮箱&#xff1a;ciebdasub-paper.com 【2】会…

三、【源码】Mapper XML的解析和注册使用

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/03-parse-mapperXML Mapper XML的解析和注册使用 流程&#xff1a; 1.Resources加载MyBatis配置文件生成Reader字符流 2.SqlSessionFact…

[职场] 质量管理求职简历工作经历范文6篇 #知识分享#经验分享

质量管理求职简历工作经历范文6篇 质量管理是指确定质量方针、目标和职责&#xff0c;并通过质量体系中的质量策划、控制、保证和改进来使其实现的全部活动&#xff0c;EMBA、MBA等主流商管教育均对质量管理及其实施方法有所介绍。下面是质量管理求职简历工作经历范文6篇&…

一种用于异质结高电子迁移率晶体管(HEMTs)的紧凑型漏电流模型,其中包括双子带的二维电子气(2DEG)密度解

来源&#xff1a;A compact drain current model for heterostructure HEMTs including 2DEG density solution with two subbands&#xff08;Solid-State Electronics 16年&#xff09; 摘要 本文提出了一种针对异质结高电子迁移率晶体管(HEMTs)的二维电子气(2DEG)电荷密度…

【ARM Cache 系列文章 7.2 – ARMv8/v9 MMU 页表配置详细介绍 03 】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 表描述符 Table descriptor52-bit OA 颗粒为4KB 和16KB52-bit OA 颗粒为64KB48-bit OA 颗粒为4KB 和16KBStage 1 和 Stage 2 介绍第一阶段(Stage 1)转换的表描述符属性字段第二阶段(…

【Python】教你彻底了解Python中的并发编程

​​​​ 文章目录 一、并发编程的基本概念1. 线程&#xff08;Thread&#xff09;2. 进程&#xff08;Process&#xff09;3. 协程&#xff08;Coroutine&#xff09; 二、Python中的线程与进程1. 线程1.1 创建和启动线程1.2 线程同步 2. 多进程2.1 创建和启动进程2.2 进程间…

【Python数据预处理系列】掌握数据清洗技巧:如何高效使用drop()函数去除不需要的列

目录 一、准备数据 二、使用drop函数去除掉指定列 在数据分析和预处理的过程中&#xff0c;经常会遇到需要从数据集中移除某些列的情况。本文将引导您了解如何使用drop函数高效地去除不需要的列&#xff0c;帮助您提升数据处理技能&#xff0c;确保您的数据集只包含对分析有价…

MYSQL ORDER BY

在MySQL中&#xff0c;默认情况下&#xff0c;升序排序会将NULL值放在前面&#xff0c;因为在排序过程中&#xff0c;NULL会被视为最小值。然而&#xff0c;有时会要求在升序排序中需要将NULL值放在最后。 例如根据日期升序时就会出现这种问题 方案一&#xff1a; SELECT sor…

【PostgreSQL 小课】日志及审计 01:日志

日志及审计 01&#xff1a;日志 以下内容是来自于我的知识星球&#xff1a;《PostgreSQL 小课》专栏&#xff0c;有需要可以关注一下 PostgreSQL 提供了非常丰富的日志基础设施。能够检查日志是每个 DBA 的关键技能——日志提供了关于集群过去的操作、当前正在进行的操作以及发…

数据虚拟化:零数据搬运,实现全域数据的集成和自适应加速

数据虚拟化技术的兴起&#xff0c;与传统数据仓库体系的弊端日益显现有着密切关系。 过去&#xff0c;企业通常会构建数据仓库来存储与加工结构化数据。数据仓库虽然实现了数据的物理集中存储&#xff0c;但过于依赖大量的 ETL 工程师来支持数据的集成、准备、开发与管理。随着…