垃圾回收算法(Garbage Collection)深度解析
垃圾回收算法(Garbage Collection)深度解析
核心思想
- 垃圾回收核心目标:
- 定位存活对象 、回收死亡对象
- 可达性分析算法、空间复用优化
生死判定原理
- 可达性分析法(Reachability Analysis)
通过GC Roots(栈变量、静态变量、JNI引用等)构建引用链,未连接的对象视为垃圾
算法评价三维度
| 指标 | 定义 | 关键影响因素 |
|---|---|---|
| 吞吐量 | 用户代码执行时间占比 | GC频率、单次GC耗时 |
| 最大暂停时间 | 单次STW最长持续时间 | 内存整理算法选择、堆大小 |
| 堆使用效率 | 有效内存空间占比 | 算法内存管理机制(碎片化程度) |
黄金三角定律:三者无法同时最优,需根据场景权衡
(缓存系统追求高吞吐、实时系统优先低延迟、嵌入式设备需高内存效率)
经典算法矩阵
1. 标记-清除(Mark-Sweep)
算法流程:
优势:
- 内存利用率100%(不预留空间)
- 无对象迁移开销
缺陷:
- 内存碎片化(外部碎片)
- 双指针遍历内存的低效性
- "致命50%"现象(整体复制性能更好)
2. 复制算法(Copying)
半区复制原理:
// 伪代码示例
void collecting() {for (LiveObject obj : fromSpace) {copyTo(obj, toSpace); // 复制存活对象forwardPtr(obj); // 更新引用指针}swap(fromSpace, toSpace); // 空间角色互换
}
优势:
- 消除内存碎片
- 顺序分配的高效性(指针碰撞)
- 年轻代最佳选择(存活率<10%时高效)
缺陷:
- 内存利用率仅50%
- 不适合大对象场景
3. 标记Credit整理(Mark-Compact)
三步机制:
- 标记存活对象
- 计算对象迁移地址
- 滑动式整理(Sliding Compaction)
优势:
- 100%内存利用率
- 消除碎片问题
缺陷:
- 三次堆遍历的高时间成本
- 老年代整理的默认选择
分代式GC(Generational GC)
设计哲学
弱分代假说:绝大多数对象朝生夕灭
强分代假说:经历多次GC的对象更长寿
内存布局
新生代细节:
- 划分结构:Eden + Survivor*2(8:1:1)
- 回收机制:
- Minor GC触发条件:Eden区满
- 对象晋升阈值:-XX:MaxTenuringThreshold(默认15)
- HotSpot实现:Parallel Scavenge(复制算法)
老年代管理:
- Major GC触发条件:老年代空间不足
- 算法实现:
- CMS(Mark-Sweep)
- G1(局部复制+全局整理)
现代GC技术演进
- 增量式GC:允许GC与用户线程交替执行
- 并发标记:CMS/G1的并发标记阶段
- Region分区:G1/ZGC的内存管理单元
- 颜色指针:ZGC的元数据存储方案
- 读屏障:Shenandoah的并发处理技术
算法性能对比表
| 算法 | 时间效率 | 空间效率 | 碎片率 | 适用场景 |
|---|---|---|---|---|
| 标记-清除 | 中 | 高 | 高 | 老年代(CMS) |
| 复制算法 | 高 | 低 | 无 | 新生代 |
| 标记-整理 | 低 | 高 | 无 | 老年代(Serial) |
| 分代GC | 极高 | 中 | 混合 | 全堆管理 |
性能调优启示
-
新生代大小设置 → 在STW时间与GC频率间找平衡
-Xmn参数建议:老年代存活对象总量的1~1.5倍 -
空间分配担保机制:
JDK6之后HandlePromotionFailure策略优化 -
大对象直接分配老年代:
-XX:PretenureSizeThreshold参数控制
相关文章:
垃圾回收算法(Garbage Collection)深度解析
垃圾回收算法(Garbage Collection)深度解析 核心思想 垃圾回收核心目标: 定位存活对象 、回收死亡对象可达性分析算法、空间复用优化 生死判定原理 可达性分析法(Reachability Analysis) 通过GC Roots(…...
基于Matlab实现语音识别算法(源码+数据)
语音识别技术是现代信息技术中的一个重要领域,特别是在人机交互、智能设备、智能家居、自动驾驶等多个领域有着广泛应用。MATLAB作为一种强大的数值计算和数据可视化环境,因其易用性和丰富的库支持,常被用来实现复杂的算法,包括语…...
RabbitMQ的高级特性介绍(一)
消息确认机制 ⽣产者发送消息之后, 到达消费端之后, 可能会有以下情况: a. 消息处理成功 b. 消息处理异常 RabbitMQ向消费者发送消息之后, 就会把这条消息删掉, 那么第二种情况, 就会造成消息丢失。 那么如何确保消费端已经成功接收了, 并正确处理了呢? 为了保证消息从队列…...
QML开发入门1--安装QT6.8和新建第一个QtQuickApplication
1.下载在线安装工具 qt-online-installer-windows-x64-4.8.1.exe 2.安装 注:可能官网qt安装很慢。需要使用国内镜像源。推荐阿里镜像 qt-online-installer-windows-x64-4.8.1.exe --mirror https://mirrors.aliyun.com/qt3.配置QT关键配置 3.1 无法编译 注&#…...
指令系统2(Load/Store 指令)
一. Load/Store 指令 1. 前变址 前变址指令是在读取或存储数据时,先根据基址寄存器(Rn)与偏移量(offset)计算出有效地址,再进行数据操作。相关指令及示例如下: LDR R0, [R1, #4]:从…...
【实战案例】用STAR+3W模型拆解电商支付系统设计文档
各位开发者朋友,上次分享了结构化写作的黄金公式后,很多同学反馈需要更具象的落地方法。今天通过真实电商支付系统案例,手把手教你用STAR3W模型写出可执行的设计文档! 结构化写作的「黄金公式」 STAR原则 3W模型 Situation&…...
C#使用SnsPictureBox.dll绘制点,线段、圆、折线、多边形、测量尺等多种图形。
CSDN下载地址:https://download.csdn.net/download/sns1991sns/87726867 gitee下载地址:https://gitee.com/linsns/SnsPictrueBox 支持2种绘制方式:响应式和等待式。 一、使用响应式绘制图形 1、在窗口构造函数里添加绘制图形的完成响应函数 public…...
如何让节卡机器人精准对点?
如何让节卡机器人精准对点? JAKA Zu 软件主界面主要由功能栏、开关栏、菜单栏构成。 菜单栏:控制柜管理,机器人管理与软件管理组成。主要功能为对控制柜关机、APP 设置、机器人本体设 置、控制柜设置、连接机器人和机器人显示等功能。 开关…...
文转语音好用的平台
一、国外平台推荐 第一梯队:全球头部服务 Amazon Polly(AWS) 特点:支持 70语言/方言,提供神经语音(NTTS)和标准语音,可克隆声音(Voice Designer)。平台&…...
常见JavaScript页面部分内容显示/隐藏设置总结
项目中经常遇到通过js判断对页面中某一部分进行显示/隐藏设置的场景,经常使用的是display,有时也会使用visibility、opacity,为此,特意查询了相关内容,对其进行了一下汇总记录下: 除了 display,…...
在 Spring Boot 中调用 AnythingLLM 的发消息接口
整体逻辑: 自建系统的web UI界面调用接口: 1.SpringBoot接口:/anything/chatMessageAnything 2.调用anythingLLM - 调用知识库deepseek r1 . Windows Installation ~ AnythingLLMhttps://docs.anythingllm.com/installation-desktop/windows http://localhost:3…...
TextView、AppCompatTextView和MaterialTextView该用哪一个?Android UI 组件发展史与演进对照表
在 Android 开发中,UI 组件一直在不断演进,从最初的原生组件,到 Support Library(AppCompat 兼容库),再到如今的 Material Design 组件。这篇文章将梳理 Android UI 组件的发展历史,并提供详细的…...
[GHCTF 2025]Popppppp[pop链构造] [php原生类的利用] [双md5加密绕过]
题目 <?php error_reporting(0);class CherryBlossom {public $fruit1;public $fruit2;public function __construct($a) {$this->fruit1 $a;}function __destruct() {echo $this->fruit1;}public function __toString() {$newFunc $this->fruit2;return $new…...
2025.3.20总结
阅读:《时间贫穷》第二章,里面讲到,运动,多行善事,体验自然,都会增强自我效能感,是对抗时间焦虑的强有力的方式。 花时间运动是值得的,公司每周三都是运动周,把运动视作…...
Tr0ll2靶机详解
一、主机发现 arp-scan -l靶机ip:192.168.55.164 二、端口扫描、漏洞扫描、目录枚举、指纹识别 2.1端口扫描 nmap --min-rate 10000 -p- 192.168.55.164发现21端口的ftp服务开启 以UDP协议进行扫描 使用参数-sU进行UDP扫描 nmap -sU --min-rate 10000 -p- 19…...
制造业数字化转型,汽车装备制造企业数字化转型案例,智能制造数字化传统制造业数字化制造业数字化转型案例
《某制造业企业信息化整体解决方案》PPT展示了一个汽车装备企业的整体信息化解决方案,阐述了该企业的业务特点和现状,主要包括按订单生产、多级计划和产品跟踪等,分析了信息化建设的主要困难,如信息管理手工化、过程数据追溯困难、…...
PyTorch模型转ONNX例子
参考:(optional) Exporting a Model from PyTorch to ONNX and Running it using ONNX Runtime — PyTorch Tutorials 2.6.0cu124 documentation import numpy as np import torch.utils.model_zoo as model_zoo import torch.onnx import torch.nn as nn import t…...
科技云报到:AI Agent打了个响指,商业齿轮加速转动
科技云报到原创。 3月16日,百度旗下文心大模型4.5和文心大模型X1正式发布。目前,两款模型已在文心一言官网上线,免费向用户开放。 同时,文心大模型4.5已上线百度智能云千帆大模型平台,企业用户和开发者登录即可调用AP…...
【蓝桥杯python研究生组备赛】005 数学与简单DP
题目1 01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整数&a…...
Chapter 4-16. Troubleshooting Congestion in Fibre Channel Fabrics
Show FCS Ie Example 4-17 shows the NX-OS command show fcs ie on Cisco MDS switches. 例 4-17 显示了 Cisco MDS 交换机上的 NX-OS 命令 show fcs ie。 Example 4-17 NX-OS command show fcs ie on Cisco MDS switches MDS9706-C# show fcs ie IE List for VSAN: 20 --…...
抖音视频数据获取实战:从API调用到热门内容挖掘
在短视频流量为王的时代,掌握抖音热门视频数据已成为内容运营、竞品分析及营销决策的关键。本文将手把手教你通过抖音开放平台API获取视频详情数据,并提供完整的代码实现及商业化应用思路。 一、抖音API权限申请与核心接口 抖音API需企业资质认证&…...
大白话读懂java对象创建的过程
1. java对象创建流程(大白话版) 咱们java对象被创建的过程大致如下,即: 在 JVM 中对象的创建,从⼀个 new 指令开始: 首先检查这个指令的参数是否能在常量池中定位到⼀个类的符号引用检查这个符号引用代表…...
Ubutu20.04安装docker与docker-compose
系统:20.04.6 LTS (Focal Fossa)" 1.配置apt源(在/etc/apt/sources.list中输入以下内容) # deb cdrom:[Ubuntu 20.04.6 LTS _Focal Fossa_ - Release amd64 (20230316)]/ focal main restricted deb http://mirrors.aliyun.com/ubuntu/ focal main restricted …...
AI图像理解技术的演进
在CLIP等现代多模态模型出现之前,早期的图生文技术主要依赖人工标注的ImageNet等数据集,但其技术路线与当前方法存在本质差异。 一、传统图生文技术的标注依赖 ImageNet的核心地位 在2012-2020年间,ImageNet的1,400万张人工标注图像ÿ…...
STM32 —— MCU、MPU、ARM、FPGA、DSP
在嵌入式系统中,MCU、MPU、ARM、FPGA和DSP是核心组件,各自在架构、功能和应用场景上有显著差异。以下从专业角度详细解析这些概念: 一、 MCU(Microcontroller Unit,微控制器单元) 核心定义 集成系统芯片&a…...
aiosignal
文章目录 安装 一、关于 aiosignal Github : https://github.com/aio-libs/aiosignal官方文档:https://aiosignal.aio-libs.org/gitter聊天:https://gitter.im/aio-libs/Lobby许可证 : Apache 2 aiosignal 管理 asyncio 项目中回调的项目。 Signal是已…...
在 VSCode 远程开发环境下使用 Git 常用命令
在日常开发过程中,无论是单人项目还是团队协作,Git 都是版本管理的利器。尤其是在使用 VSCode 连接远程服务器进行代码开发时,Git 不仅能帮助你管理代码版本,还能让多人协作变得更加高效。本文将介绍一些常用的 Git 命令ÿ…...
电脑节电模式怎么退出 分享5种解决方法
在使用电脑的过程中,许多用户为了节省电力,通常会选择开启电脑的节能模式。然而,在需要更高性能或进行图形密集型任务时,节能模式可能会限制系统的性能表现。这时,了解如何正确地关闭或调整节能设置就显得尤为重要了。…...
kubernetes高级实战
一、模拟企业环境进行一个实战部署 [rootmaster node]# kubectl apply -f pod-tomcat.yaml pod/tomcat-test created [rootmaster node]# kubectl get pods NAME READY STATUS RESTARTS AGE tomcat-test 2/2 Running 0 2s [rootmaster node]…...
【Java】——程序逻辑控制(构建稳健代码的基石)
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:【Java】内容概括 文章目录: 一.顺序结构二.分支结构1.if 语句1.1 语法格式11.2 语法格式21.3 语法格式3 …...
