5.JVM-G1垃圾回收器
一、什么是G1


二、G1的三种垃圾回收方式
region默认2048


三、YGC的过程(Step1)







3.1相关代码
public class YGC1 {/*-Xmx128M -XX:+UseG1GC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+UnlockExperimentalVMOptions -XX:G1LogLevel=finest128m5% 60%6.4M 75M*/private static final int size = 1024 * 256;public static void main(String[] args) {byte[] data = new byte[1024 * 256];for (int i = 0; i < 100; i++) {data = new byte[1024 * 256];}}
}
这里Egen区会扩容,多次垃圾回收会 25M -> 75M
0.147: [GC pause (G1 Evacuation Pause) (young), 0.0027754 secs][Parallel Time: 1.3 ms, GC Workers: 10][GC Worker Start (ms): 147.4 147.4 147.4 147.4 147.4 147.9 147.9 148.3 148.3 148.4Min: 147.4, Avg: 147.8, Max: 148.4, Diff: 1.0][Ext Root Scanning (ms): 0.4 0.3 0.2 0.2 0.2 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.1, Max: 0.4, Diff: 0.4, Sum: 1.1][Thread Roots (ms): 0.4 0.0 0.1 0.1 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.1, Max: 0.4, Diff: 0.4, Sum: 0.5][StringTable Roots (ms): 0.0 0.0 0.1 0.1 0.1 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.3][Universe Roots (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][JNI Handles Roots (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][ObjectSynchronizer Roots (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][FlatProfiler Roots (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Management Roots (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][SystemDictionary Roots (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][CLDG Roots (ms): 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.3, Diff: 0.3, Sum: 0.3][JVMTI Roots (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][CodeCache Roots (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][CM RefProcessor Roots (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Wait For Strong CLD (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Weak CLD Roots (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][SATB Filtering (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Update RS (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Processed Buffers: 0 0 0 0 0 0 0 0 0 0Min: 0, Avg: 0.0, Max: 0, Diff: 0, Sum: 0][Scan RS (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Code Root Scanning (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Object Copy (ms): 0.5 0.6 0.7 0.7 0.7 0.4 0.4 0.0 0.0 0.0Min: 0.0, Avg: 0.4, Max: 0.7, Diff: 0.7, Sum: 3.9][Termination (ms): 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.0 0.0 0.0Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.2, Sum: 0.9][Termination Attempts: 5 2 3 4 3 3 4 1 1 1Min: 1, Avg: 2.7, Max: 5, Diff: 4, Sum: 27][GC Worker Other (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.3][GC Worker Total (ms): 1.0 1.0 1.0 1.0 1.0 0.6 0.6 0.1 0.1 0.0Min: 0.0, Avg: 0.6, Max: 1.0, Diff: 1.0, Sum: 6.3][GC Worker End (ms): 148.4 148.4 148.4 148.4 148.4 148.4 148.5 148.4 148.4 148.4Min: 148.4, Avg: 148.4, Max: 148.5, Diff: 0.1][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.4 ms][Other: 1.1 ms][Choose CSet: 0.0 ms][Ref Proc: 0.6 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.3 ms][Parallel Redirty: 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Redirtied Cards: 0 0 0 0 0 0 0 0 0 0Min: 0, Avg: 0.0, Max: 0, Diff: 0, Sum: 0][Humongous Register: 0.0 ms][Humongous Total: 0][Humongous Candidate: 0][Humongous Reclaim: 0.0 ms][Humongous Reclaimed: 0][Free CSet: 0.0 ms][Young Free CSet: 0.0 ms][Non-Young Free CSet: 0.0 ms][Eden: 24576.0K(24576.0K)->0.0B(37888.0K) Survivors: 0.0B->2048.0K Heap: 24576.0K(128.0M)->1152.0K(128.0M)][Times: user=0.00 sys=0.00, real=0.00 secs]
Heapgarbage-first heap total 131072K, used 13440K [0x00000000f8000000, 0x00000000f8100400, 0x0000000100000000)region size 1024K, 15 young (15360K), 2 survivors (2048K)Metaspace used 3458K, capacity 4496K, committed 4864K, reserved 1056768Kclass space used 370K, capacity 388K, committed 512K, reserved 1048576K
3.2停顿预测模型与垃圾回收区域选择
-XX:MaxGCPauseMillis=1最大停顿时间1ms
Eden区域 大小从 6M 缩小到5M 尽可能满足,停顿时间



3.2.1 如何判断先回收哪个区域
垃圾数量占Regen的百分比,优先gc百分比高的
3.2.2停顿预测模型
可以手动指定,G1会尽可能满足,默认是根据**响应时间优先算法来决定 **根据前面gc的时间整体判断这次的时间
四、MixGC的过程(Step2)


1. 初始标记阶段_1

2. 并发标记_2

3. 再标记阶段_3

4. 统计对象计数_4
整理统计每个regen里面垃圾的占比,并且排序

5. 垃圾回收_5
根据上一步算出来的gc顺序进行gc

6. 完整回收流程

6.1 为什么并发标记之前有一次YGC
YGC之后,将整理后的S区整合,清理掉不用的Eden区,根据这个S区开始作为根的一部分进行扫描


6.2 为什么混合回收会多次进行
- 混合回收多次执行 为了符合 停顿预测模型的时间
- 混合回收之前的YGC 为了回收的时候年轻代"干净";

垃圾占Regen 少于 15% 就不会被统计

判断GC之后 可回收空间>5% 才会执行

最多这个流程分成8次,为了符合停顿时间

五FullGC的过程(Step3)
5.1 什么情况下触发FullGC


5.2 FullGC具体过程
5.2.1FullGC如何复制对象
使用标记压缩

5.2.2 标记活跃对象(Step1)

5.2.3 计算引用对象地址(Step2)
计算gc之后存活对象所处的位置

5.2.4 更新引用对象地址(Step3)
遍历所有存活对象,告诉他们去的地址

5.2.5 复制对象(Step4)
使用标记压缩

5.2.6 复制后的处理(Step5)

5.3 大对象怎么存储呢?
默认使用多个region来存储,并且直接进入老年代,使得老年代回收变得非常慢
解决方案: 大对象不要进入老年代,不行就手动加大region大小
public class HE {/*-Xmx128M -XX:+UseG1GC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails-XX:G1HeapRegionSize=4M 手动指定region大小128m5% 60%6.4M 75M*/private static final int size = 1024 * 4096;public static void main(String[] args) {byte[] data = new byte[1022 * 4096];for (int i = 0; i < 50; i++) {data = new byte[1022 * 4096];}}
}
相关文章:
5.JVM-G1垃圾回收器
一、什么是G1 二、G1的三种垃圾回收方式 region默认2048 三、YGC的过程(Step1) 3.1相关代码 public class YGC1 {/*-Xmx128M -XX:UseG1GC -XX:PrintGCTimeStamps -XX:PrintGCDetails -XX:UnlockExperimentalVMOptions -XX:G1LogLevelfinest128m5% 60%6.4M 75M*/private stati…...
Odrive0.5.1-FOC电机控制 arm_cos_f32.cpp arm_sin_f32.cpp代码实现(一)
01 查表法 在 our_arm_cos_f32 函数中,查表(Look-Up Table, LUT) 的核心是 预计算的正弦值表 sinTable_f32,通过巧妙利用余弦与正弦的相位关系实现快速余弦计算。以下是详细解析: 1. 查的是什么表? (1) 表内…...
机械臂只有位置信息是否可以进行手眼标定?
平常我在做手眼标定时,一般都是通过OpenCV的cv::calibrateHandEye函数进行求解,需要输入多组不同的机械臂位姿。今天遇到了一款舵机机器人,只能获取位置,得不到姿态信息,想着那就把姿态都设为0,结果求不出来…...
Python 数据分析01 环境搭建教程
Python 数据分析01 环境搭建教程 一、安装 Python 环境 访问 Python 官方网站 Python 官网,选择适合你操作系统的 Python 版本进行下载。下载完成后,运行安装程序。在安装过程中,建议选择“Add Python to PATH”选项,这样可以在…...
使用 Visual Studio 2022 (VS2022) 编译 FreeCAD 1.0.0 的详细教程
一、环境准备 官方教程:在 Windows 上编译 - FreeCAD Documentation Windows 10/11(推荐) git vs2022 cmake 3.26.4 Doxygen1.12 二、获取源码与依赖 版本关系 打开Git Bash或CMD,执行以下命令 git clone --recurse-sub…...
Java高性能并发利器-VarHandle
1. 什么是 VarHandle? VarHandle 是 Java 9 引入的类,用于对变量(对象字段、数组元素、静态变量等)进行低级别、高性能的原子操作(如 CAS、原子读写)。它是 java.util.concurrent.atomic 和 sun.misc.…...
蓝桥杯单片机频率
long int Freq; unsigned int Timer_1000Ms; 加上 TMOD | 0x05; void Timer0Init(void) //0毫秒12.000MHz {AUXR & 0x7F; //定时器时钟12T模式TMOD & 0xF0; //设置定时器模式TMOD | 0x05;TL0 0x00; //设置定时初值TH0 0x00; //设置定时初值TF0 0; //清除TF0标…...
【Qt】【第三方库】spdlog日志模块的使用
版本 spdlog版本:1.5.0 采用1.5.0版本主要基于以下考虑:兼容Qt5.9.X版本和兼容C11。 spdlog 1.5.0下载地址:https://github.com/gabime/spdlog/releases/tag/v1.5.0 摘要 在Qt应用程序开发中,良好的日志系统至关重要。本文将介…...
elementui table禁用全选,一次限制勾选一项。
1、设置属性:selection-change“handleSelectionChange” <el-table:data"taskList"ref"tableDataRefs"selection-change"handleSelectionChange":header-cell-class-name"hideAllCheckbox">function handleSelecti…...
3.1多状态专题:LeetCode面试题17.16 按摩师
动态规划解决按摩师预约问题——以LeetCode面试题17.16为例 1.题目链接 LeetCode面试题17.16 按摩师 2.题目描述 一个有名的按摩师收到一系列的预约请求,每个预约都可以选择接受或不接受。但相邻的预约不能同时接受。给定一个包含各预约时长的数组 nums…...
遵循IEC 62304:构建安全可靠的医疗器械软件
目录 一、IEC 62304 标准概述 1. 标准定位与适用范围 二、核心内容与要求 1. 软件安全等级(Software Safety Classification) (1)分级标准 (2)分级依据 (3)验证要求 2. 软件…...
互联网三高-数据库高并发之分库分表
1 数据库概述 1.1 数据库本身的瓶颈 ① 连接数 MySQL默认最大连接数为100,允许的最大连接数为16384 ② 单表海量数据查询性能 单表最好500w左右,最大警戒线800w ③ 单数据库并发压力问题 MySQL QPS:1500左右/秒 ④ 系统磁盘IO、CPU瓶颈 1.2 数…...
UE5 在UE中创建骨骼动画
文章目录 创建动画的三种方式修改骨骼动画 创建动画的三种方式 方法一 打开一个已有的动画,左上角“创建资产/创建动画/参考姿势” 这将创建一个默认的A字形的骨骼,不建议这么做 方法二 打开一个已有的动画,左上角“创建资产/创建动画/当前…...
Day-01 前端 Web - HTMLCSS
目录 一、HTML 基础 1. HTML 简介 2. HTML 基本结构 3. 常用 HTML 标签 二、CSS 基础 1. CSS 简介 2. CSS 引入方式 3. 常用 CSS 选择器 4. 常用 CSS 属性 一、HTML 基础 1. HTML 简介 HTML(HyperText Markup Language)即超文本标记语言&…...
AWS出海合规解决方案:全球业务扩张的技术指南
1. 引言 随着企业加速全球化进程,出海业务面临的合规挑战日益复杂。AWS作为全球领先的云服务提供商,为企业提供了强大的工具和服务,以帮助它们满足各国的合规要求。本文将探讨如何利用AWS服务构建全面的出海合规解决方案。 2. 全球数据合规挑战 在开始讨论具体解决方案之…...
[ctfshow web入门] web38
信息收集 过滤多了php和file if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag|php|file/i", $c)){include($c);echo $flag;}}else{highlight_file(__FILE__); }解题 更多解法参考 [ctfshow web入门] web37 我们选个最简单的。但是因为php被过滤了我们改用…...
汽车CAN总线采样点和采样率详解
写在前面 本篇文章主要讲解在汽车电子中CAN总线采样率的相关知识点,内容涉及CAN波特率、采样点、时间份额、同步跳转宽度以及采样率的计算。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 1、CAN波特率 CAN波特率常规分为250kbps和500kbps,本文章主要以这两个波特率为…...
网络协议学习
最近在适配ESP32的网络驱动,借此机会先学习一下网络通信协议。 以太网帧、IP包及TCP与UDP的报文格式一文读懂网络报问中的检验和(checksum)—— 原理举例代码 提问腾讯元宝提示词: TCP窗口是干什么的拥塞窗口是什么的...
仙剑奇侠传98柔情版游戏秘籍
战斗秘技:在战斗中输入 “cheat”,然后输入 “v” 直接取胜;输入 “y” 敌人不攻击。另外,在战斗中按 “XJPXZ123” 加 “shift” 键,攻击力增加 1000%。等级提升秘籍:当李逍遥等级到达 99 级时…...
Maven error:Could not transfer artifact
问题描述 当项目从私有仓库下载依赖时,Maven 报错,无法从远程仓库下载指定的依赖包,错误信息如下: Could not transfer artifact com.ding.abcd:zabk-java:pom from/to releases (http://192.1122.101/repory/mavenleases/): 此…...
pytorch 反向传播
文章目录 概念计算图自动求导的两种模式 自动求导-代码标量的反向传播非标量变量的反向传播将某些计算移动到计算图之外 概念 核心:链式法则 深度学习框架通过自动计算导数(自动微分)来加快求导。 实践中,根据涉及号的模型,系统会构建一个计…...
WindowsPE文件格式入门06.手写最小PE
https://bpsend.net/thread-346-1-1.html 实现目标 实现目标:手写实现不大于 200 Byte大小的PE文件(又名:畸形PE/变形PE),要求MessageBox弹框显示一个字符串。实现要点:充分利用空间,在保证遵…...
并发编程--互斥锁与读写锁
并发编程–互斥锁与读写锁 文章目录 并发编程--互斥锁与读写锁1. 基本概念2. 互斥锁2.1 基本逻辑2.2 函数接口2.3示例代码12.4示例代码2 3. 读写锁3.1 基本逻辑3.2示例代码 1. 基本概念 互斥与同步是最基本的逻辑概念: 互斥指的是控制两个进度使之互相排斥&#x…...
记录第一次使用H5的WebBluetooth完成蓝牙标签打印机的(踩坑)过程
第1步 首先第一步,调试环境必须是https的,由于浏览器的强制安全策略,本地可以采用localhost 第2步 然后,如果打印需要服务UUID(Service UUID) 和 特征UUID(Characteristic UUID)&…...
2025 年“认证杯”数学中国数学建模网络挑战赛 A题 小行星轨迹预测
近地小行星( Near Earth Asteroids, NEAs )是轨道相对接近地球的小行 星,它的正式定义为椭圆轨道的近日距不大于 1.3 天文单位( AU )的小行星。 其中轨道与地球轨道最近距离小于 0.05A 且直径大于 140 米的小行星被…...
【WRF理论第十七期】单向/双向嵌套机制(含namelist.input详细介绍)
WRF运行的单向/双向嵌套机制 准备工作:WRF运行的基本流程namelist.input的详细设置&time_control 设置&domain 嵌套结构&bdy_control 配置部分 namelist 其他注意事项Registry.EM 运行 ARW 嵌套双向嵌套(two-way nesting)Moving …...
Spring Boot 3.4.3 和 Spring Security 6.4.2 结合 JWT 实现用户登录
在现代 Web 应用中,用户认证和授权是保障系统安全的核心环节。传统的 Session 认证方式在分布式系统或前后端分离场景下存在局限,而 JWT(JSON Web Token)作为一种无状态的认证机制,凭借其轻量、可扩展和跨服务的特性&a…...
Python 实现的运筹优化系统数学建模详解(0-1规划指派问题)
一、引言 在数学建模的广阔领域中,指派问题作为一类经典且重要的组合优化问题,频繁出现在各类实际场景里。例如,在人力资源管理中,如何将不同技能水平的员工高效地分配到各个项目,以实现项目成本最小化或收益最大化&am…...
TCP转发隧道
✅ 功能特性: 1. 高并发支持:采用 threading.Thread socket,可承载多并发连接 2. 异常处理完善:确保线程内异常不会崩溃整个程序 3. 可持续运行:守护线程 主线程监控机制 4. 运行状态监控: • 当前活跃连…...
React 学习 JSX
APP根组件被index.js渲染到public下的index.html下 JS中写 HTML 代码 渲染列表 条件渲染 复杂条件渲染 事件绑定 传递自定义参数 button标签中写箭头函数引用的格式 自定义参数和事件本身对象都想要的情况...
