JVM垃圾收集器-serial.parNew,parallelScavnge,serialOld,parallelOld,CMS,G1
垃圾收集器
分代模型
适用于新生代:
serial
parNew
parallel Scaavenge
适用于老年代:
CMS
serial Old(msc)
paraller Old
分区模型
适用于超大容量:
G1

分代模型
serial /serial Old收集器
1.单线程收集器
2.收集时会暂停其他线程(用户体验不好)
3.新生代是复制算法,老年代是标记整理算法
4.参数配置
-XX: +UseSerialGC #新生代使用serial收集器
-XX: +UseSerialOldGC #老年代使用serial收集器
优点:
1.简单高效,无其他线程的开销
2.对于多核cpu,依旧采用单线程,浪费cpu资源

parNew 收集器
1.serial 收集器的多线程版本
2.线程数与cpu 核数相关
3.参数设置
-XX: +UseParNewGC
4.搭配CMS收集器使用

parallel Scavenge/parallelOld 收集器
1.关注的是吞吐量,使更高效的利用CPU,
3.参数配置
-XX +UseParallelGC
-XX +UseParallelOldGC

CMS收集器(重点)(低停顿)(标记清除算法)
1.采用标记清除算法
2.只能使用在老年代
3.尽量减少停顿时间(低停顿)
垃圾清理过程:
1.初始标记:该阶段会暂停其他线程,标记初与GCroot 根 直接 关联的对象,其余可达对象不会被标记
2.并发标记:标记出GCroot 根所有的可达对象(耗时长,占整个收集的80%时间,但是和用户线程一起执行)
3.重新标记:该阶段会暂停其他线程,将 并发标记时 新产生的对象进行标记
4.并发清理:将对象进行清除
缺点:
1.并发标记和并发清除时,会和用户线程抢夺cpu资源
2.在并发清理时:会有用户线程产生新的垃圾,这些垃圾不会被回收
3.采用 标记清除算法,会产生不连续的碎片(补救办法:通过参数-XX +UseCMSCompactAtFullCollection 设置清除完后进行整理)
4.时间不确定性,在一次没收集完后,直接进入下一次收集,导致收集失败,(补救办法:使用serial Old收集器,但会产生停顿)
参数配置
设置线程数,设置是否做整理以及fullGC多少次后做整理,设置fullGC之前是否再来一次minorGC来减少标记时开销
-XX: +UseConcMarkSweepGC #使用收集器
-XX: ConcGCThreads #并发GC线程数
-XX: +UseCMSCompactAtFullCollection # FUllGC后是否做整理
-XX: CMSFullGCsBeroreCompaction # 多少次FUllGC后做整理,默认是0,代表每次都做整理
-XX: CMSInitatingOccupancyFraction #设置老年代的使用到多少时,会触发FullGC
-XX:+UseCMSInitatingOccupancyOnly #设置回收阀值,不指定的话,除了第一次外,之后jvm会自动调整
-XX: +CMSSvacavengeBeroreRemark #在FullGC之前,进行minorGC 目的是通过减少对象引用,减少标记阶段的开销

分区模型
G1收集器(面向大容量)(筛选回收)(复制算法)
大容量:指的是给堆内存分配十几个G以上
1.将堆区分成多个区(最多可以有2048个区,每个区的大小是堆内存/2048),且每个区可以是任意年轻代,老年代。
2.年轻代默认占比是整个堆区的5%(可以通过参数配置,但不能超过60%)
3.Humongous 区:大对象区,将超过一个区的50%,就会直接放到大对象区,大对象区在FullGC的时候进行回收
优点:避免大对象进入老年代,占用老年代的空间而触发FullGC。
垃圾收集过程:
1.初始标记:标记GCroot根直接关联的对象
2.并发标记:标记GCroot根可达到的所有对象
3.最终标记:将有变动的对象进行再次标记
4.筛选回收:通过设置回收时间-XX : MaxGCPauseMillis #指定回收时间 ,默认200ms,堆区的回收价值和成本进行排序,然后在设定的时间内回收
5.复制算法:将每个区存活对象,复制到空白区。
收集器分类:
1.youngGC
当Eden区满了后,计算回收当前Eden区需要多长时间,然后与设置的回收时间比较 -XX : MaxGCPauseMillis 若是远远小于,则对新生代进行扩容(增加区),若接近,则进行youngGC
2.mixedGC
老年代占用整个堆区的设定的值-XX:InitiatingHeapOccupancyPrencet 的值,会进行mixedGC,进行时会将部分年轻代,部分老年代,部分大对象区进行回收
3.FullGC
对象在复制的时候,空白的区放不下存活的对象,就会触发FullGC,采用单线程回收,标记清除,整理对象,会停止用户线程

ZGC收集器
JDK11 推出的低延迟收集器 (10ms)
堆区的划分
将堆区分为小页面,中页面,大页面
Small Region:2MB,主要用于放置小于 256 KB 的小对象。
Medium Region:32MB,主要用于放置大于等于 256 KB 小于 4 MB 的对象。
Large Region:N * 2MB。这个类型的 Region 是可以动态变化的,不过必须是 2MB 的整数倍,最小支持 4 MB。每个 Large Region 只放置一个大对象,并且是不会被重分配的。

安全点
JVM进行检查,业务线程没有对象的创建和引用的改变,就可以进行STW
判断垃圾的方式
传统垃圾收集器,使用可达性分析,GC 信息保存在对象头的 Mark Word 中,回收时需要进行对象遍历,查看对象头
ZGC:着色指针
着色指针
在 64 位的指针上,高 16 位都是 0,暂时不用来寻址。剩下的 48 位支持的内存可以达到 256 TB(2 ^48),这可以满足多数大型服务器的需要了。不过 ZGC 并没有把 48 位都用来保存对象信息,而是用高 4 位保存了四个标志位,这样 ZGC 可以管理的最大内存可以达到 16 TB(2 ^ 44)
JVM 可以从指针上直接看到对象的三色标记状态(Marked0、Marked1)、是否进入了重分配集(Remapped)、是否需要通过 finalize 方法来访问到(Finalizable)

标记垃圾的方式:着色指针

GC过程
1.初始标记
将GCroots 根直接关联的对象进行标记(会进行STW)
2.并发标记
3.再标记
4.并发转移准备
5.初始转移
6.并发转移

相关文章:
JVM垃圾收集器-serial.parNew,parallelScavnge,serialOld,parallelOld,CMS,G1
垃圾收集器 分代模型 适用于新生代: serial parNew parallel Scaavenge 适用于老年代: CMS serial Old(msc) paraller Old 分区模型 适用于超大容量: G1 分代模型 serial /serial Old收集器 1.单线程收集器 2.收集时会暂停其他线程&…...
docker搭建upload-labs
Upload-labs 是一个专门设计用于学习和练习文件上传安全的开源工具。它提供了各种场景的文件上传漏洞,供用户通过实践来学习如何发现和利用这些漏洞,同时也能学习到防御措施。使用 Docker 来搭建 upload-labs 环境是一种快速、简便的方法,它可…...
超详细外贸单证汇总!
今天给大家汇总了外贸单证的种类与使用相关知识,东西齐全,赶紧码住! 1、合同 CONTRACT是统称,买卖双方均可出具。如系卖方制作,可称为销售确认书,买方出具则可称为采购。 买卖双方均可出具合同。卖方出具的,可称为销售确认书(Sales Confir…...
Docker部署ChatGLM3、One API、FastGPT
创建并运行chatglm3容器 docker run --name chatglm3 -p 8000:8000 registry.cn-hangzhou.aliyuncs.com/ryyan/chatglm.cpp:chatglm3-q5_1 创建并运行one-api容器 (其中挂载路径 D:\one-api 可以选择你自己喜欢的目录) docker run --name oneapi -d -p 3000:3000 -e TZAsia…...
【Linux-网络编程】
Linux-网络编程 ■ 网络结构■ C/S结构■ B/S结构 ■ 网络模型■ OSI七层模型■ TCP/IP四层模型 ■ TCP■ TCP通信流程■ TCP三次握手■ TCP四次挥手 ■ 套接字:socket 主机IP 主机上的进程(端口号)■ TCP传输文件 ■ 网络结构 ■ C/S结构…...
win10虚拟机安装驱动教程
在虚拟机菜单栏中选择安装VMware Tools: 安装好后,在虚拟机中打开此电脑,双击DVD驱动器进行安装: 一直点击下一步: 安装完成: 此时重启虚拟机,发面小屏幕页面的虚拟机自动占满了全部屏幕&#x…...
SpringBoot实战项目——博客笔记项目
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍二、项目的整体框架 2.1 数据库模块 2.2 前端模块 2.3 后端模块三、项目图片展示四、项目的实现 4.1 准备工作 4.…...
【海贼王的数据航海】排序——直接选择排序|堆排序
目录 1 -> 选择排序 1.1 -> 基本思想 1.2 -> 直接选择排序 1.2.1 -> 代码实现 1.3 -> 堆排序 1.3.1 -> 代码实现 1 -> 选择排序 1.1 -> 基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置&…...
Flutter 的 switch 语句补遗
我的 App 里,一个消息气泡变成空白了,非常奇怪,此前一直是没问题的,经过调试定位我发现: static TextSpan _buildRootSpan(BuildContext ctx, List<LinkifyElement> parts, TextStyle? style) {List<InlineS…...
Linux动态库*.so函数名修改
在某些学习或者特殊需求的情况下要对linux下动态库*.so文件内部的函数名进行修改。 比如一个函数ADD(int a,int b);修改为Add(int a,int b); 通过这篇文章你将了解到在linux下动态库函数名寻址的规则,截止2024年3月linux动态库的寻址规则已经出现多种,这…...
adb shell 指令集
1.connect device连接设备: adb devices #return: List of devices attached 0123456789ABCDEF device2.连接终端 adb shell从设备拷贝文件到本地 adb pull <remote> [local] 如: adb pull /sdcard/demo.txt e:\从到本地拷贝文件到设备 adb push &…...
【电子通识】CH340C与CH340G的区别
在USB转串口电路中,网上买到的模块常常用的到是CH340或是CP2102。 但是CH340也有很多的版本,比如CH340C和CH340G,那么他们到底都有哪些差别。 环境特性 从规格书中可以看出环境特性CH340G是-40度到85度,而CH340C批号不是4开头…...
基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的吸烟检测系统(深度学习+Python代码+PySide6界面+训练数据集)
摘要:本文详细说明了如何利用深度学习开发一个用于监测吸烟行为的系统,并分享了完整的代码实现。该系统采用了先进的YOLOv8算法,同时还使用YOLOv7、YOLOv6、YOLOv5算法,并对它们进行了性能比较,呈现了不同模型的性能指…...
Apache Paimon 使用之 Lookup Joins 解析
Lookup Join 是流式查询中的一种 Join,Join 要求一个表具有处理时间属性,另一个表由lookup source connector支持。 Paimon支持在主键表和附加表上进行Lookup Join。 a) 准备 创建一个Paimon表并实时更新它。 -- Create a paimon catalog CREATE CAT…...
GO语言-切片底层探索(下)
目录 切片的底层数据结构 扩容机制 总结: 练习验证代码 这是切片的底层探索下篇,上篇地址请见:GO语言-切片底层探索(上) 在上篇我们讲解了切片的两个重要实现或者说是两个特征 切片是引用类型,会进行…...
物理隔离条件下,如何安全高效地进行内外网文件导入导出?
内外网文件导入导出通常指的是在内部网络(内网)和外部网络(外网)之间传输文件的过程。这在企业环境中尤其常见,因为内部网络通常包含敏感数据,而外部网络(如互联网)则允许更广泛的访…...
代码随想录 贪心算法-难度题目-区间问题
目录 55.跳跃游戏 45.跳跃游戏|| 452.用最少数量的箭引爆气球 435.无重叠区间 763.划分字母区间 56.合并区间 55.跳跃游戏 55. 跳跃游戏 中等 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大…...
地理数据 vs. 3D数据
在表示我们周围的物理世界时,地理空间数据和 3D 建筑数据是两个最常见的选择。 他们在各个行业和项目中发挥着至关重要的作用。 从构建数字孪生到可视化城市景观和创建沉浸式应用程序。 尽管地理空间和 3D 建筑数据有相似之处,但它们不可互换。 虽然地…...
Redis删除
一、del命令 del命令是Redis提供的一个常规的删除键的命令。它的语法如下: DEL key [key …] 其中,key是要删除的键名。可以指定多个键名,删除多个键。如果指定的键不存在,则会被忽略。 del命令会直接删除指定的键以及与之相关联…...
力扣细节题:字符串中的最大奇数
奇数只要找到第一位是奇数的即可,不是找单个数字 //即从最低位开始,找到第一位为奇数的位 //然后之前的就是需要的数字char * largestOddNumber(char * num){int i strlen(num) - 1;while(i > 0){if((num[i] - 0) % 2 1)break;i--;}//先找到低位开…...
碧蓝航线自动化助手:5分钟掌握解放双手的终极解决方案
碧蓝航线自动化助手:5分钟掌握解放双手的终极解决方案 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 你是否曾为…...
当创意遭遇围墙:AO3镜像站的破局与共建指南
当创意遭遇围墙:AO3镜像站的破局与共建指南 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 问题象限:当同人爱好者遇上访问壁垒 解读创作自由的数字鸿沟 想象这样一个场景:深夜的…...
OpenClaw备份方案:Qwen2.5-VL-7B技能与配置的定期同步
OpenClaw备份方案:Qwen2.5-VL-7B技能与配置的定期同步 1. 为什么需要备份OpenClaw系统 上周我的开发机突然蓝屏,硬盘分区表损坏。当我重装系统后,发现过去三个月精心调教的OpenClaw配置全部丢失——包括调试好的技能参数、对接的飞书机器人…...
人事档案整理系统开发记录
档案整理系统开发记录 本篇文章,用于记录我个人开发档案整理工具的所有问题。 说明:开发该工具适用于人事档案处理工具,适用于档案处理,帮助档案整理人员更轻松的移交。 我会一步一步记录,整个软件开的所有的问题&…...
学术研究助手:OpenClaw+Gemma-3-12b-it自动化文献综述生成
学术研究助手:OpenClawGemma-3-12b-it自动化文献综述生成 1. 为什么需要自动化文献综述工具 作为一名经常需要写论文的研究生,我深刻体会到文献综述是整个研究过程中最耗时耗力的环节之一。每次开题或写新论文时,都需要花费数天甚至数周时间…...
MinIO实战指南:Linux环境下的部署、配置与防火墙调优
1. MinIO是什么?为什么选择它? 如果你正在寻找一个轻量级、高性能的对象存储解决方案,MinIO绝对值得一试。作为一个开源的分布式对象存储系统,它兼容Amazon S3 API,这意味着你可以用极低的成本搭建私有云存储服务。我在…...
电影票销售管理|基于springboot + vue电影票销售管理系统(源码+数据库+文档)
电影票销售管理系统 目录 基于springboot vue电影票销售管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue电影票销售管理系统 一、前言 博主…...
告别网络限制!哔咔漫画离线下载神器使用全攻略
告别网络限制!哔咔漫画离线下载神器使用全攻略 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: https://gitcode.com/gh_mirrors…...
2026届必备的六大AI论文助手实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 此刻,针对学术写作情形的AI辅助网站已然构建起多元化生态,这类平台一…...
HUSB238 USB-C PD物理层驱动设计与ESP32集成指南
1. HUSB238 驱动库概述HUSB238 是由 Microchip 推出的 USB Type-C 和 USB PD(Power Delivery)源端(Source)控制器,专为高集成度、小尺寸 USB-C 充电应用设计。其核心功能包括:USB-C 插拔检测(CC…...
