JVM专栏-垃圾回收器

Dify 系列教程 | 第 6 篇:工作流入门 -- 用可视化方式编排 AI 逻辑 Dify 工作流是一个基于有向无环图(DAG)的可视化 AI 逻辑编排系统。你可以把多个处理步骤(节点)用连线串联起来,数据从起点流向终点,每经过一个节点就被处理一次。用一个类比来理解:如果单次 Prompt 调用是"一道菜",那工作流就是"一道完整的生产线" – 原材料(输入)进入流水线,经过清洗(预处理)、切配(数据转换)、烹饪(AI 推理)、装盘(格式化输出)等工序,最终产出成品。创建一个工作流类型的应用(或高级聊天类型),就会进入工作流编辑器。编辑器基于ReactFlow构建( 阅读详情

本文以HotSpot 虚拟机为例, 讲述一下几种常见的垃圾回收器.

新生代垃圾收集器

Serial 垃圾收集器(单线程)

只开启一条 GC 线程进行垃圾回收,并且在垃圾收集过程中停止一切用户线程,即 Stop The World。

一般客户端应用所需内存较小,不会创建太多对象,而且堆内存不大,因此垃圾收集器回收时间短,即使在这段时间停止一切用户线程,也不会感觉明显卡顿。因此 Serial 垃圾收集器适合客户端使用。

由于 Serial 收集器只使用一条 GC 线程,避免了线程切换的开销,从而简单高效。

alt

ParNew 垃圾收集器(多线程)

ParNew 是 Serial 的多线程版本。由多条 GC 线程并行地进行垃圾清理。但清理过程依然需要 Stop The World。

ParNew 追求“低停顿时间”,与 Serial 唯一区别就是使用了多线程进行垃圾收集,在多 CPU 环境下性能比 Serial 会有一定程度的提升;但线程切换需要额外的开销,因此在单 CPU 环境中表现不如 Serial。

alt

Parallel Scavenge 垃圾收集器(多线程)

Parallel Scavenge 和 ParNew 一样,都是多线程、新生代垃圾收集器。但是两者有巨大的不同点:

  • Parallel Scavenge:追求 CPU 吞吐量,能够在较短时间内完成指定任务,因此适合没有交互的后台计算。
  • ParNew:追求降低用户停顿时间,适合交互式应用。

吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)

追求高吞吐量,可以通过减少 GC 执行实际工作的时间,然而,仅仅偶尔运行 GC 意味着每当 GC 运行时将有许多工作要做,因为在此期间积累在堆中的对象数量很高。单个 GC 需要花更多的时间来完成,从而导致更高的暂停时间。而考虑到低暂停时间,最好频繁运行 GC 以便更快速完成,反过来又导致吞吐量下降。

  • 通过参数 -XX:GCTimeRadio 设置垃圾回收时间占总 CPU 时间的百分比。
  • 通过参数 -XX:MaxGCPauseMillis 设置垃圾处理过程最久停顿时间。
  • 通过命令 -XX:+UseAdaptiveSizePolicy 开启自适应策略。我们只要设置好堆的大小和 MaxGCPauseMillis 或 GCTimeRadio,收集器会自动调整新生代的大小、Eden 和 Survivor 的比例、对象进入老年代的年龄,以最大程度上接近我们设置的 MaxGCPauseMillis 或 GCTimeRadio。

老年代垃圾收集器

Serial Old 垃圾收集器(单线程)

Serial Old 收集器是 Serial 的老年代版本,都是单线程收集器,只启用一条 GC 线程,都适合客户端应用。它们唯一的区别就是:Serial Old 工作在老年代,使用“标记-整理”算法;Serial 工作在新生代,使用“复制”算法。

Parallel Old 垃圾收集器(多线程)

Parallel Old 收集器是 Parallel Scavenge 的老年代版本,追求 CPU 吞吐量。

CMS 垃圾收集器

CMS(Concurrent Mark Sweep,并发标记清除)收集器是以获取最短回收停顿时间为目标的收集器(追求低停顿),它在垃圾收集时使得用户线程和 GC 线程并发执行,因此在垃圾收集过程中用户也不会感到明显的卡顿。

  • 初始标记:Stop The World,仅使用一条初始标记线程对所有与 GC Roots 直接关联的对象进行标记。
  • 并发标记:使用 多条标记线程,与用户线程并发执行。此过程进行可达性分析,标记出所有废弃对象。速度很慢。
  • 重新标记:Stop The World,使用多条标记线程并发执行,将刚才并发标记过程中新出现的废弃对象标记出来。
  • 并发清除:只使用一条 GC 线程,与用户线程并发执行,清除刚才标记的对象。这个过程非常耗时。

并发标记与并发清除过程耗时最长,且可以与用户线程一起工作,因此,总体上说,CMS 收集器的内存回收过程是与用户线程一起并发执行的。

alt

CMS 的缺点:

  • 吞吐量低
  • 无法处理浮动垃圾
  • 使用“标记-清除”算法产生碎片空间,导致频繁 Full GC

对于产生碎片空间的问题,可以通过开启 -XX:+UseCMSCompactAtFullCollection,在每次 Full GC 完成后都会进行一次内存压缩整理,将零散在各处的对象整理到一块。设置参数 -XX:CMSFullGCsBeforeCompaction 告诉 CMS,经过了 N 次 Full GC 之后再进行一次内存整理。

G1 通用垃圾收集器

G1 是一款面向服务端应用的垃圾收集器,它没有新生代和老年代的概念,而是将堆划分为一块块独立的 Region。当要进行垃圾收集时,首先估计每个 Region 中垃圾的数量,每次都从垃圾回收价值最大的 Region 开始回收,因此可以获得最大的回收效率。

从整体上看, G1 是基于“标记-整理”算法实现的收集器,从局部(两个 Region 之间)上看是基于“复制”算法实现的,这意味着运行期间不会产生内存空间碎片。

这里抛个问题 👇

一个对象和它内部所引用的对象可能不在同一个 Region 中,那么当垃圾回收时,是否需要扫描整个堆内存才能完整地进行一次可达性分析?

并不!每个 Region 都有一个 Remembered Set,用于记录本区域中所有对象引用的对象所在的区域,进行可达性分析时,只要在 GC Roots 中再加上 Remembered Set 即可防止对整个堆内存进行遍历。

如果不计算维护 Remembered Set 的操作,G1 收集器的工作过程分为以下几个步骤:

  • 初始标记:Stop The World,仅使用一条初始标记线程对所有与 GC Roots 直接关联的对象进行标记。
  • 并发标记:使用 一条标记线程与用户线程并发执行。此过程进行可达性分析,速度很慢。
  • 最终标记:Stop The World,使用多条标记线程并发执行。
  • 筛选回收:回收废弃对象,此时也要 Stop The World,并使用多条筛选回收线程并发执行。

本文由 mdnice 多平台发布

PCL 三次均匀B样条曲线拟合 阅读详情

相关推荐

Abel逆变换及其求解方法

Abel逆变换常应用在轴对称的、光学薄的火焰、羽流或等离子体重建。

weixin_49783507的博客 8368

JVM之垃圾收集器:ParNew垃圾回收器

文章目录简介ParNew 与 Serial 对比设置Reference 简介 ParNew 简介 如果说Serial GC是年轻代中的单线程垃圾收集器,那么ParNew收集器则是Serial收集器的多线程版本Par是Parallel的缩写New:只能处理新生代ParNew是很多JVM运行在Server模式下新生代的默认垃圾收集器 回收方式 复制算法、并行回收和"Stop-the-world"机制 回收区域 新生代 ParNew 与 Serial 对比 由于ParNew收

xylitolz的博客 940

《哥谭神话-工程篇》02.Palantir的Ontology层(语义层) -企业操作系统的大脑

Ontology(语义层) 是Foundry 的核心层。Ontology 位于集成到 Foundry 中的数字资产(数据集和模型)之上,并将其连接到现实世界的对应物,从工厂、设备和产品等物理资产到客户订单或金融交易等概念。本篇将详细拆解Ontology(语义层)。

883

JVM揭秘之旅:打破性能瓶的终极指南(2)

摘要: 本文深入解析JVM核心组件——本地方法栈与堆内存。本地方法栈通过JNI支持非Java代码调用,堆则存储对象实例并易发OOM。重点演示堆内存问题排查: 1️⃣ 工具实战:使用jmap监控堆内存变化、jconsole检测线程死锁、jvisualvm分析大对象(如1MB/个的Student实例); 2️⃣ 调优技巧:建议缩小-Xmx尽早暴露内存泄漏,结合堆dump定位占用源; 3️⃣ 可视化分析:展示从内存快照到源码定位的全链路排查过程。通过工具链组合,开发者可快速诊断GC无效、内存泄漏等典型问题。

半旧518的博客 383

Aurix TC3XX Cache memory分析

Aurix Cache memory 分析

qwe0405080615的博客 4346

基于MicroBlaze与LWIP的FPGA以太网通信实战指南

本文详细介绍了基于MicroBlaze软核处理器与LWIP协议栈的FPGA以太网通信实现方案。通过Vivado工具链配置硬件设计,结合LWIP轻量级TCP/IP协议栈优化,提供高效、低成本的嵌入式网络解决方案,适用于工业控制等场景。文章包含硬件设计、软件配置及常见问题排查等实战指南。

weixin_29290863的博客 532

【JVM基础篇】Java垃圾回收器介绍

本文档详细解析了Java虚拟机(JVM)中垃圾回收器的原理与实践,涵盖Serial、ParNew、CMS、Parallel Scavenge与Parallel Old、G1等主流垃圾回收器的工作机制、优缺点及适用场景。特别聚焦于G1垃圾回收器,阐述其创新的Region分区管理、年轻代与混合回收策略,以及如何通过参数调整实现低延迟垃圾回收。适合希望深入了解JVM内存管理和优化的开发者阅读。

我只管埋头前行,剩下的交给时间。 5265

深入浅出DDR系列(二)--DDR工作原理

学习完了DDR的基本组成和硬件结构原理之后,从整体上了解了DDR的特性和静态图,包括原理、管脚图等。那么本章就要从动态的角度来分析时序结构,包括read/write的整个过程到数据返回发生了什么,其中包括以下内容 DDR是如何完成Read、Write 等的操作 DDR的基本命令 DDR的时序参数 DDR的性能分析 1. DRAM基本组成 对于DRAM,其主要由行和列组成,每一个bit中都是由类似右下图的类晶体管的结构组成,对于sdram的数据,可以通过控制column和row就可以访问sd

奇小葩 3万+

JVM工作原理与实战(二十七):堆的垃圾回收-G1垃圾回收器

JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器、G1垃圾回收器的回收方式、G1垃圾回收器执行流程、垃圾回收器的选择等内容。

Rye的博客 2264

PID不够用?试试给PID加上‘预言’能力:史密斯预测器(SP)在温控、液位控制中的实战配置

本文深入探讨了史密斯预测器(SP)在温控和液位控制中的应用,特别针对大滞后系统的PID控制难题。通过详细解析SP的核心组件、参数整定技巧及进阶应用FSP,结合西门子PLC的实战配置方案,帮助工程师有效提升控制精度和系统稳定性。文章还提供了S7-1200的完整实现步骤和调试技巧,为工业自动化控制提供了实用解决方案。

weixin_33686714的博客 468

【电机控制入门】——电机控制书籍推荐

电机控制入门书籍推荐及分享 阅读须知: 1.电机控制的入门是涉及到机械、电子与控制等复杂交叉学习,它需要持续投入时间才可以看到学习的效果,如同“一万小时定律”。俗话说,九层之台,起于垒土,因此电机控制入门没有所谓的速成培训班。相反,还需要夯实好一定的基础。为此,博主建议从基础理论抓起,故推荐相关的书籍并分享给大家。 2.学习电机贵在动手实践,无论是借助于MATLAB/Simulink仿真平台来验证理论分析,或是使用板子对所设计的控制系统进行物理实现,博主极力推荐在一定基础(看完部分以下推荐的书籍),一边动手

昔时扬尘处 3万+

JVM工作原理与实战(二十六):堆的垃圾回收-垃圾回收器

​ JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收器、Serial垃圾回收器、SerialOld垃圾回收器、ParNew垃圾回收器、CMS垃圾回收器、Parallel Scavenge垃圾回收器、Parallel Old垃圾回收器等内容。 ​

Rye的博客 1741

Hermes 教程 05:多 Agent 编排

本文介绍了Hermes v0.13.0中的四种多Agent协作模式:1)delegate_task快速子任务模式,适合2-3个独立并行任务;2)spawn子Agent模式,实现零成本并行多步流水线;3)tmux交互子Agent模式,支持长期自主任务;4)全新Kanban看板系统,提供持久化AI团队协作框架。各模式在隔离级别、时长、工具访问和适用场景上存在差异,其中spawn模式通过独立上下文窗口实现零上下文成本。文章详细说明了每种模式的使用方法、限制条件和典型应用场景,并提供了具体代码示例和可视化流程图。K

程序猿_三产 534

JVM工作原理与实战(三十九):G1垃圾回收器原理

JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器执行流程、年轻代回收原理、卡表(Card Table)、记忆集的生成流程、年轻代回收的详细步骤、混合回收的步骤、初始标记、并发标记、SATB、转移等内容。

Rye的博客 4688

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

面试八股之JVM篇3.4——垃圾回收——垃圾回收器

详细讲解了JVM,串行垃圾收集器、并行垃圾收集器、CMS(并发)垃圾收集器、G1垃圾收集器

做一个善良的人,做好自己的事,如果愿意,再发一份光。 836

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

HoRain云--JVM垃圾回收器指南

本文详细对比了Java虚拟机(JVM)中G1、CMS、ZGC和Shenandoah四种主流垃圾回收器的特性。G1适合平衡吞吐量与延迟的场景,CMS(已废弃)追求低延迟但易产生内存碎片,ZGC和Shenandoah则专为极致低延迟设计,适合大内存系统。文章提供了选择指南:小内存可选G1,大内存推荐ZGC/Shenandoah,并强调实际测试的重要性。最后针对不同JDK版本给出了推荐方案,帮助开发者根据应用需求选择最适合的"内存管家"。

2401_86544677的博客 752

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Shenandoah垃圾回收器:JDK21中的新亮点

JDK21中的Shenandoah垃圾回收器带来了三大核心优化:1)并发标记与回收技术显著减少应用停顿;2)自适应堆大小调整自动优化内存使用;3)低延迟特性确保高响应系统稳定运行。通过配置参数"-XX:+UseShenandoahGC"即可启用,并提供了内存泄漏解决方案,如检查对象引用和使用弱引用。该更新为高并发场景提供了更高效的垃圾回收方案,是JDK21的重要性能优化之一。

fykam的博客 1683

面试八股之JVM篇3.5——垃圾回收——G1垃圾回收器

详细讲解了G1垃圾回收器的工作原理

做一个善良的人,做好自己的事,如果愿意,再发一份光。 1074

《剑指JVM》——第16章——G1垃圾回收器

🔥本篇概览:详细讲解了G1垃圾回收器的方方面面🌈⭕🔥

做一个善良的人,做好自己的事,如果愿意,再发一份光。 1040

JVM工作原理与实战(四十四):JVM常见面试题目

JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了JVM常见面试题目等内容。

Rye的博客 3022

第八篇章——垃圾回收器

本专栏学习内容来自以及有兴趣的小伙伴可以点击视频地址观看,也可以点击下载电子书有了虚拟机,就一定需要收集垃圾的机制,这就是Garbage Collection(GC),对应的产品(垃圾收集器)称为Garbage Collector(GC)两个都称为GC,本文中的GC理解为垃圾收集器。...

Yellow_Star的博客 508

ZGC垃圾回收器优化:性能提升实战

JDK21中ZGC垃圾回收器进行了多项优化:1)并发标记采用高效算法快速标记嵌套对象;2)优化内存分配策略,减少多线程竞争;3)提升并发转移效率。这些改进使ZGC在低延迟(停顿时间缩短)和吞吐量(单位时间处理量)方面表现更优,特别适合金融交易等实时系统。文章通过Java代码示例演示了ZGC性能测试方法,并指出合理配置堆内存和并发线程数的重要性。系列专栏还提供JDK各版本新特性的系统学习路径。

fykam的博客 818

JVM垃圾回收算法

选择合适的垃圾回收器和算法,可以显著提升 Java 应用的性能和稳定性。

qq_57756904的博客 951

【大厂面试题专栏更文】:一文帮你总结JVM 垃圾回收算法✨

文章目录????毛遂自荐????文章整体架构????JVM垃圾回收算法✨标记-清除算法✨复制算法✨标记-整理算法✨分代收集算法????常见垃圾回收器使用到的回收算法????最后 ????毛遂自荐 毛遂自荐一下,给大家推荐一下自己的专栏????,欢迎小伙伴们收藏关注???? 大厂面试题专栏 Java专栏 爬虫专栏 更多专栏尽在主页,点我????!!! ????文章整体架构 ????JVM垃圾回收算法 ✨标记-清除算法 该算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,

Code皮皮虾的博客 592

JVM垃圾回收器

JVM垃圾回收器

Again_acme的博客 330

深入理解 JVM 的几种常见垃圾回收算法

本文详细介绍了 JVM 中几种常见的垃圾回收算法,包括标记-清除算法、复制算法、标记-整理算法和分代收集算法,并探讨了几种常见的垃圾回收器及其适用场景。理解和优化垃圾回收机制,对于提高 Java 应用的性能和稳定性至关重要。

良月柒 1511
上一篇: JVM专栏-垃圾回收策略与算法
下一篇: JVM专栏-内存分配与回收策略
yue_stack
博客等级 码龄3年 6粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值