关于常见垃圾收集器的理解

stw:垃圾回收的时候,工作线程全部停止

新生代三款:
serial: 单线程。stw。复制算法。新生代。
适合单线程应用和客户端模式。

ParNew:多线程(垃圾回收的时候使用多线程)。stw。新生代。
适合多处理器环境。

Parallel Scavenge:吞吐量优先(保证用户线程能够占用更多的运行时间),有参数可以控制最大gc时间以及gc占用的时间比例。
多线程(垃圾回收的时候使用多线程)。stw。复制算法。新生代。
适合大规模后台任务,注重吞吐量而非延迟。

老年代三款:
CMS:垃圾回收线程和用户线程同时运行。标记-清除算法。老年代。
缺点:内存碎片 + 浮动垃圾
追求低延迟。适合对响应时间要求较高的应用。

Serial Old:单线程,stw,标记-整理算法,老年代。
适合单线程应用以及低内存场景。

Parallel old:多线程。stw。标记-整理算法,老年代。
适合大规模后台任务,注重吞吐量而非延迟。

G1:追求低延迟,可预测的停顿时间,用于取代cms。
分区来管理内存,垃圾回收时优先收集最有价值的区域。
整体来看,采用的是标记-整理算法,两个region之间采用的是复制算法。没有内存碎片。
适合大内存,多cpu的服务器应用。

ZGC:
低延迟、高吞吐量的垃圾收集器。停顿时间一般不会超过10毫秒。
适合大内存并且对低延迟要求极高的应用。

=搭配==
serial 和 serial old配合使用。

parnew 和 cms 配合使用。

Parallel Scavenge 和 Parallel old配合使用。jdk 1.8默认的组合。

==cms四个阶段=
1.初始标记:标记gc roots能直接关联到的对象,stw,耗时短
2.并发标记:从gc roots能直接关联到的对象开始遍历整个对象图。耗时长,但是不需要stw。
3.重新标记:采用增量更新算法,对并发标记阶段因为用户线程的运行而产生变化的对象,重新进行标记。需要stw,但是耗时短。
4.并发清除:并发清除掉垃圾对象,不需要stw。

优点:并发标记以及并发清除节点,不需要stw,所以停顿时间短。
缺点:内存碎片 + 浮动垃圾
内存碎片:因为采用的是标记-清除算法,不会进行内存整理,所以会产生内存碎片。
浮动垃圾:并发清理阶段,用户线程在继续运行,新产生的垃圾没办法进行处理,只能等待下一次垃圾回收处理。

==G1四个阶段=
1.初始标记:标记gc roots能直接关联到的对象,stw,耗时短。还会修改TAMS(top at mark start)指针.
TAMS: G1为每个region都设计了两个TAMS指针,新分配的对象必须位于这两个指针位置以上;位于这两个位置以上的对象默认被标记为存活,不纳入回收范围。
2.并发标记:从gc roots能直接关联到的对象开始遍历整个对象图。遍历完成,还会处理SATB记录的发生变动的对象。
SATB:能够有效的解决并发标记阶段,因为用户线程运行而导致的对象变动。效率比cms重新标记阶段使用的增量更新高。
3.最终标记:stw,处理并发阶段遗留下来的少量的SATB记录。
4.筛选回收:计算各个region回收的价值,选择回收价值大的进行回收。将一个region中存活的对象,复制到另一个region中,然后清空旧的region。因为需要复制存活的对象,所以是stw的,防止用户线程干扰。

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

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

相关文章

flink实战-- flink任务的火焰图如何使用

火焰图 Flame Graphs 是一种有效的可视化工具,可以帮助我们排查如下问题: 目前哪些方法正在消耗 CPU 资源?一个方法的消耗与其他方法相比如何?哪一系列的堆栈调用导致了特定方法的执行?y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的…

.Net Core 6.0 WebApi在Centos中部署

查看已经开发的端口的列表 firewall-cmd --zonepublic --list-ports .net core sdk密匙 sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm sudo yum update .net core sdk安装 sudo yum install -y dotnet-sdk-6.0 sudo dnf in…

Java基于SpringBoot+Vue的农产品电商平台

大家好,我是Java徐师兄,今天为大家带来的是Java基于SpringBoot 的农产品电商平台。该系统采用 Java 语言 开发,MySql 作为数据库,系统功能完善 ,实用性强 ,可供大学生实战项目参考使用。 博主介绍&#xff…

一文读懂系列:结合抓包分析,详解SSH协议通信原理

SSH协议通过建立加密通道来提供安全的远程访问、文件传输和执行远程命令等操作。接下来我们就通过具体示例和抓包分析,让大家清楚地了解SSH协议的神秘面纱!如有更多疑问,欢迎讨论区留言讨论~ 1. SSH简介 SSH(Secure Shell&#x…

数据冒险-ld和add(又称load-use冒险)

第一张图没有使用前递,第二张图使用前递,chatgpt分析第二张图 这张图展示了一个流水线的执行过程,其中存在读后写(RAW)数据冒险。我们可以通过**前递(Forwarding)**技术来解决这个数据冒险&…

Java 的 Scanner 类:控制台输入与文件扫描

Java 的 Scanner 类是一个非常方便的工具类,主要用于从控制台或文件中扫描输入数据。虽然它也可以用于扫描文件内容,但我们通常更喜欢它用于控制台输入,因为扫描文件可以通过文件流来完成。接下来,我们将通过几个简单的示例来讲解…

安卓市场如何做APP的分发、推广?

今天主要跟大家分享一些分发、推广这块操作的内容以及对安卓用户的一些理解。 分发的日常生活:“某渠道怎样怎样,应用宝是不是要加点预算,OPPO是不是要加点预算,你的成本又高了,华为又掉注册,应用宝又掉注册…

基于JavaWeb的图书售卖网站(源码+部署+LW)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于JavaWeb的图书售卖网…

高级 <HarmonyOS主题课>构建华为支付服务的课后习题

五色令人目盲&#xff1b; 五音令人耳聋&#xff1b; 五味令人口爽&#xff1b; 驰骋畋猎&#xff0c;令人心发狂&#xff1b; 难得之货&#xff0c;令人行妨&#xff1b; 是以圣人为腹不为目&#xff0c;故去彼取此。 本篇内容主要来自&#xff1a;<HarmonyOS主题课>构建…

python全栈开发《63.判断两个集合中是否有相同的元素》

目录 1.isdisjoint的功能2.isdisjoint的用法3.代码 1.isdisjoint的功能 判断两个集合是否包含相同的元素。如果没有&#xff0c;返回True&#xff1b;如果有&#xff0c;返回False。 2.isdisjoint的用法 a_set {name,xiaomu,xiaoming} b_set {xiaoming,xiaogang,xiaohong} re…

员工管理系统(python)

利用python的自定义函数以及循环函数写一个小的员工管理系统&#xff0c;以下是详细代码&#xff1a; # 定义一个空的员工列表&#xff0c;用于存储员工信息 list_ems []# 添加员工的函数 def add():# 提示用户输入员工的各项信息employee_id input("请输入员工的工号&…

做AI大模型应用层产品研发,基本绕不开这几个大模型API

国内有不少独立模型厂商提供 API 可供调用&#xff0c;几乎都会成为技术选择的可选项&#xff1a; Moonshot AI&#xff1a; API 特点&#xff1a;其 API 与 OpenAI 兼容&#xff0c;方便开发者平滑迁移&#xff0c;开发者无需对代码做除基本参数外的“额外”修改&#xff0c;…

MySQL数据库专栏(五)连接MySQL数据库C API篇

摘要 本篇文章主要介绍通过C语言API接口链接MySQL数据库&#xff0c;各接口功能及使用方式&#xff0c;辅助类的封装及调用实例&#xff0c;可以直接移植到项目里面使用。 目录 1、环境配置 1.1、添加头文件 1.2、添加库目录 2、接口介绍 2.1、MySql初始化及数据清理 2.1.…

Ubuntu系统被木马程序攻击,运行莫名进程杀掉又自动重启解决办法

问题&#xff1a;Ubuntu系统被攻击了&#xff0c;有莫名进程运行杀掉又自动重启。 原因&#xff1a;攻击原因估计是用户名和密码过于简单&#xff0c;ssh服务穿透时等被暴力破解了。 nvidia-smi&#xff1a;存在莫名的./java程序&#xff0c;kill掉也会重启其它木马进程&#…

Java基于SpringBoot+Vue框架的宠物寄养系统(V2.0),附源码,文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【MySQL】函数

3.函数 MySQL中的函数主要分为以下四类&#xff1a; 字符串函数、数值函数、日期函数、流程函数。 3.1 字符串函数 演示如下&#xff1a; A. concat : 字符串拼接 select concat(Hello , MySQL);B. lower : 全部转小写 select lower(Hello);C. upper : 全部转大写 select…

Android笔记(三十五):用责任链模式封装一个App首页Dialog管理工具

背景 项目需要在首页弹一系列弹窗&#xff0c;每个弹窗是否弹出都有自己的策略&#xff0c;以及哪个优先弹出&#xff0c;哪个在上一个关闭后再弹出&#xff0c;为了更好管理&#xff0c;于是封装了一个Dialog管理工具 效果 整体采用责任链模块设计&#xff0c;控制优先级及弹…

【实战篇P2-5】手把手实现STM32+ESP8266+原子云服务器+手机APP应用——第五节-编写Android手机APP程序实现接入原子云服务器

使用的开发软件是Android studio Android SDK(运行环境 :最低版本 21(Android 5.0) 最高版本 29 (Android 9.0) Gradle 版本 :4.6 根据源码,可自定义修改界面,修改名称,根据需求自定义数据展示界面等,修改app图标及名称等。 目录 Android程序设计 Android…

2024双十一数码好物推荐?双十一超值数码好物汇总别错过!

随着2024年双十一购物狂欢节临近尾声&#xff0c;各大电商平台的促销活动已经进入了最后的冲刺阶段。在这场年度最大的购物盛宴中&#xff0c;数码产品无疑是消费者关注的焦点。无论是提升工作效率的电脑、平板&#xff0c;还是丰富娱乐生活的手机、耳机&#xff0c;各大品牌纷…

Android V 挂起线程超时导致system_server挂掉

问题背景 最近Android v的平台频繁爆monkey异常停止的问题,分析到根因不是频繁dump堆栈导致system_server挂掉就是三方应用进程内部死锁导致anr,然后system_server挂起线程超时,system_server就崩了。 解决方案 先来看看anr导致死锁的场景如何分析 从log来看确认为syste…