说一下 jvm 有哪些垃圾回收器?
JVM 垃圾回收器对比表
| 垃圾回收器 | 类型 | 工作方式 | 回收方式 | 停顿时间 | 适用场景 | 优点 | 缺点 | 常见问题 | 常见配置 |
|---|---|---|---|---|---|---|---|---|---|
| Serial GC | 串行 | 单线程,STW | 年轻代:复制算法 老年代:标记-整理 | 长 | 小内存、单核CPU,如桌面应用或嵌入式设备 | 简单高效,适用于单核和小内存环境 | STW 时间长,不适用于多线程、高并发环境 | 长时间停顿影响用户体验 | -XX:+UseSerialGC |
| Parallel GC | 并行 | 多线程,STW | 年轻代:复制算法 老年代:标记-整理 | 中等 | 高吞吐量场景,如批量计算、大数据处理 | 适用于多核 CPU,吞吐量高,自动调优 | STW 时间不可预测,容易造成短时性能抖动 | 长时间 Full GC 导致系统暂停 | -XX:+UseParallelGC(年轻代并行)-XX:+UseParallelOldGC(老年代并行) |
| CMS GC | 并发 | 多线程,部分 STW | 标记-清除,并发标记、并发清除 | 短(部分长停顿) | 低延迟场景,如在线系统、Web 服务器 | 低停顿时间,可并发清理,适用于交互式应用 | 易产生碎片,导致 Full GC,容易造成“浮动垃圾”问题 | 碎片化严重,需要频繁 Full GC | -XX:+UseConcMarkSweepGC |
| G1 GC | 并发并行 | 逻辑分区回收,Region 机制 | 标记-整理 + 复制,Mixed GC 结合年轻代和老年代 | 可调 | 大内存、低停顿场景,如大型 Web 服务器 | 停顿可预测,回收均衡,减少碎片 | 配置复杂,Full GC 开销大,调优较难 | Full GC 触发后暂停时间较长 | -XX:+UseG1GC |
| ZGC | 并发并行 | 读屏障、并发回收 | 并发标记-复制 | 极短(<1ms) | 超大内存、低延迟,如云计算、金融交易系统 | STW 低于 1ms,可扩展至 16TB 内存 | 内存占用大,支持的 JDK 版本有限,调优难度大 | 内存占用过大时可能影响吞吐量 | -XX:+UseZGC-XX:ZUncommitDelay=300(内存回收优化) |
| Shenandoah GC | 并发并行 | 并发标记、并发清理 | 标记-清除 + 复制 | 极短 | 超大内存、低延迟,如电商、游戏服务器 | 低延迟(<10ms),并发回收,适用于交互式应用 | 小内存环境下表现不如 CMS/G1,CPU 占用较高 | 高 CPU 使用率,影响吞吐量 | -XX:+UseShenandoahGC |
补充说明
- STW(Stop The World):指垃圾回收期间所有应用线程必须暂停,影响系统响应时间。
- 吞吐量(Throughput):衡量 GC 回收效率,吞吐量高的 GC 适用于计算密集型任务,但可能会有较长的 STW 停顿。
- 低延迟(Low Latency):适用于需要极短暂停时间的应用,如金融、云计算、实时系统。
- G1/ZGC/Shenandoah 适用于大内存环境,尤其是 ZGC 可支持 16TB 内存,G1 可平衡吞吐与停顿。
- 停顿时间:指的是垃圾回收暂停应用程序的时间。较长意味着回收期间会发生较长时间的“Stop The World”事件。
- 适用场景:指各个回收器的典型应用环境,如服务器应用、多核CPU或客户端应用等。
- 优点:列出了每个回收器在特定场景下的优势。
- 缺点:列出了每个回收器可能面临的挑战或局限。
这个表格简要地比较了常见的垃圾回收器,帮助你选择合适的垃圾回收器时参考。
相关文章:
说一下 jvm 有哪些垃圾回收器?
JVM 垃圾回收器对比表 垃圾回收器类型工作方式回收方式停顿时间适用场景优点缺点常见问题常见配置Serial GC串行单线程,STW年轻代:复制算法 老年代:标记-整理长小内存、单核CPU,如桌面应用或嵌入式设备简单高效,适用于…...
react国际化配置react-i18next详解
react PC端项目构建TS,react18.2.0antdviteaxiosreduxsassts 完整版代码下载: https://download.csdn.net/download/randy521520/88922625 react PC端项目构建,react18.2.0antdviteaxiosreduxsass完整版代码下载: https://downloa…...
Java并发编程——上下文切换、死锁、资源限制
文章目录 1.1上下文切换(1)上下文切换的概念(2)多线程一定比单线程快吗?(3)测量上下文切换如何减少上下文切换 1.2 死锁(1)死锁的定义(2)死锁产生…...
MS08067练武场--WP
免责声明:本文仅用于学习和研究目的,不鼓励或支持任何非法活动。所有技术内容仅供个人技术提升使用,未经授权不得用于攻击、侵犯或破坏他人系统。我们不对因使用本文内容而引起的任何法律责任或损失承担责任。 注:此文章为快速通关…...
ubuntu文件同步
1. 使用 rsync 同步文件 rsync 是一个常用的文件同步工具,可以在本地或远程系统之间同步文件和目录。 基本用法: rsync -avz /源目录/ 目标目录/-a:归档模式,保留文件属性。-v:显示详细输出。-z:压缩传输…...
C++23 新特性解析
引言:C的持续进化 在ISO C标准委员会的不懈努力下,C23作为继C20后的又一重要迭代版本,带来了十余项核心语言特性改进和数十项标准库增强。本文将深入解析最具实用价值的五大新特性,介绍std::expected到模块化革命。 编译器支持 …...
算法05-堆排序
堆排序详解 堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法。它的核心思想是利用堆的性质(最大堆或最小堆)来实现排序。堆排序分为两个主要步骤:建堆和排序。 1. 什么是堆? 堆是一种特殊的完全二叉…...
Arrays工具类详解
目录 1. Arrays.toString() 方法 2. Arrays.deepToString() 方法 3. Arrays.equals(int[ ] arr1, int[ ] arr2) 方法 4. Arrays.equals(Object[] arr1, Object[] arr2) 方法 5. Arrays.deepEquals(Object[] arr1, Object[] arr2) 方法 6. Arrays.sort(int[] arr) 方法 7…...
无人机图像拼接数据的可视化与制图技术:以植被监测为例
无人机技术在生态环境监测中的应用越来越广泛,尤其是在植被监测领域。通过无人机获取的高分辨率影像数据,结合GIS技术,可以实现对植被覆盖、生长状况等的精确监测与分析。本文将通过一个实际案例,详细讲解无人机图像拼接数据的可视…...
在 debian 12 上安装 mysqlclient 报错
报错如下 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting mysqlclientUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/61/68/810093cb579daae426794bbd9d88aa830fae296e85172d18cb0f0e5dd4bc/mysqlclient-2.2.7.tar.gz (91 kB)Installi…...
python基础入门:7.1迭代器与生成器
Python迭代器与生成器深度解析:高效处理海量数据的利器 # 大文件分块读取生成器模板 def chunked_file_reader(file_path, chunk_size1024*1024):"""分块读取大文件生成器"""with open(file_path, r, encodingutf-8) as f:while Tru…...
Docker 容器 Elasticsearch 启动失败完整排查记录
背景 在服务器上运行 Docker 容器 es3,但 Elasticsearch 无法正常启动,运行 docker ps -a 发现 es3 处于 Exited (1) 状态,即进程异常退出。 本次排查从错误日志、容器挂载、权限问题、SELinux 影响、内核参数等多个方面入手,最…...
达梦数据使用笔记
相关文档: 达梦官网 达梦技术文档 1.安装完成后在开始菜单中搜索DM 目录:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\达梦数据库 下有所有相关信息 2.数据迁移 https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html https:…...
操作系统中的任务调度算法
一、引言 在操作系统中,任务调度算法是核心组件之一,它负责合理分配有限的 CPU 资源,以确保系统的高效运行和良好的用户体验。任务调度的目标是实现公平性、最小化等待时间、提高系统吞吐量,并最大化 CPU 的利用率。不同的任务调…...
Linux 虚拟服务器(LVS)技术详解
一、LVS 概述 Linux 虚拟服务器(Linux Virtual Server,简称 LVS)是由章文嵩博士开发的一种开源的服务器集群技术,它工作在 Linux 内核空间,为构建高可用、可扩展的网络服务提供了一种高效的解决方案。LVS 可以将多个真…...
AIoT时代来临,物联网技术如何颠覆未来生活?
在这个万物互联的时代,“物联网”(IoT)正以前所未有的速度改变我们的生活,而“AIoT”则是在物联网基础上融入人工智能技术,赋予设备更高的智能和自主决策能力。随着5G、边缘计算和云技术的不断发展,物联网正…...
C++17 新特性解析
C++17 是 C++ 标准的一个重要更新,它在 C++11/14 的基础上引入了许多新特性,进一步简化了代码编写、提升了性能和类型安全性。以下是 C++17 的主要特性分类介绍: 一、语言核心改进 1. 结构化绑定(Structured Bindings) 允许将元组、结构体或数组的成员直接解包到变量中。…...
嵌入式软件C语言面试常见问题及答案解析(四)
嵌入式软件C语言面试常见问题及答案解析(四) 原本打算将链表相关的面试题整合到一个文档中,奈何写着写着就发现题目比较多,题型也比较丰富,所以导致上一篇已经足够长了,再长也就有点不礼貌了。 所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者…...
在 C# 中,处理 Excel 和 PDF 文件的库有很多。以下是一些比较常用的选择
读取 Excel 文件的库 NPOI 用途:可以读取和写入 .xls 和 .xlsx 文件。特点:无需安装 Microsoft Office,支持简单的 Excel 操作,如格式化、公式、图表等。 EPPlus 用途:主要用于 .xlsx 格式(Excel 2007 及以…...
绩效归因概述
绩效归因概述 1. 分类2. 基于净值的归因方法2.1 发展背景2.2 择时选股模型 T-M模型2.3 择时选股模型 H-M模型2.4 择时选股模型 C-L模型2.5 风格配置模型-Sharpe2.6 多因子模型 Fama-French32.7 多因子模型 Carhart42.8 多因子模型 Fama-French5 3. 基于持仓的归因方法3.1 发展背…...
避坑指南:用conda管理TensorFlow环境时如何避免FailedPreconditionError日志目录冲突
避坑指南:用conda管理TensorFlow环境时如何避免FailedPreconditionError日志目录冲突 在深度学习项目开发中,TensorFlow作为主流框架之一,其环境配置的稳定性直接影响开发效率。许多开发者习惯使用conda进行Python环境管理,但在Te…...
拓扑排序不止于理论:用邻接矩阵实现时,我踩过的3个坑和性能优化
拓扑排序实战:邻接矩阵实现中的性能陷阱与优化策略 邻接矩阵作为图论中最直观的存储结构,常被初学者用来实现拓扑排序算法。但当我们真正将其投入实际项目时,往往会遭遇意想不到的性能瓶颈和逻辑陷阱。本文将分享三个真实项目中踩过的坑&…...
【SoC】【ESP32】从零到一:VSCode+ESP-IDF环境下的高效开发工作流构建
1. 为什么选择VSCodeESP-IDF开发ESP32? 第一次接触ESP32开发时,我尝试过各种开发环境:Arduino IDE、PlatformIO、Eclipse...直到遇到VSCodeESP-IDF的组合,才发现这才是嵌入式开发的"完全体"。ESP-IDF作为乐鑫官方的开发…...
PvZ Toolkit:植物大战僵尸资源管理与战局调控综合解决方案
PvZ Toolkit:植物大战僵尸资源管理与战局调控综合解决方案 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 在植物大战僵尸的游戏世界里,玩家常常面临阳光短缺、金币不足的困…...
Python内存管理进入“自动驾驶”时代:详解memguard-core插件的AI预测式回收机制,安装仅需3行命令
第一章:Python智能体内存管理策略Python智能体(如基于LLM的Agent、ReAct架构或Tool-Calling Agent)在运行过程中常面临对象生命周期长、中间状态缓存多、工具调用频繁导致引用残留等问题。其内存管理不能仅依赖CPython默认的引用计数与循环垃…...
Comsol光子晶体:谷霍尔效应、单胞与超胞能带计算及谷单向传输
Comsol光子晶体谷霍尔效应。 单胞,超胞能带计算。 谷单向传输等。光子晶体玩拓扑这件事最近越来越上头。今天咱们撸起袖子直接干一个谷霍尔效应仿真,手把手教你在COMSOL里搞出单向传输这种神奇现象。先说重点:结构旋转6度就能打开带隙&#x…...
OpenClaw技能扩展:GLM-4.7-Flash驱动Markdown文档自动整理
OpenClaw技能扩展:GLM-4.7-Flash驱动Markdown文档自动整理 1. 为什么需要文档自动化整理 作为一个长期使用Markdown写作的技术博主,我的文档目录早已变成了"数字坟场"。上周试图寻找半年前写的Docker网络配置笔记时,面对notes_20…...
企业如何防御LockBit 3.0?从IOC到实战检测规则编写指南
企业级防御实战:LockBit 3.0勒索病毒全维度对抗指南 1. 勒索病毒威胁态势与企业防御挑战 2023年全球网络安全报告显示,勒索软件攻击同比增长47%,其中LockBit系列占比高达28%。不同于传统恶意软件,LockBit 3.0采用模块化设计&#…...
别再手动调参了!用Matlab+NRBO-BP+NSGAII搞定工艺优化,自动生成最优参数组合Excel
工艺优化新范式:基于NRBO-BP与NSGAII的智能参数寻优系统 在化工、材料、制造等领域的工艺优化过程中,工程师和研究人员常常面临一个共同的挑战:如何在有限的实验资源和时间约束下,从海量的参数组合中找到最优解。传统的手动调参方…...
TypeScript——tsconfig.json
tsconfig.json1、使用配置文件1.1、自动搜索配置文件1.2、指定配置文件2、编译选项列表3、编译文件列表3.1、--listFiles编译选项3.2、 默认编译文件列表3.3、files属性3.4、include属性3.5、 exclude属性4、声明文件列表4.1、--typeRoots编译选项4.2、--types编译选项5、继承…...
