自助建站网站建设设计公司高端品牌服装

张小明 2025/12/30 16:40:40
自助建站网站建设设计公司,高端品牌服装,应用公园免费版下载,嘉兴模板建站定制Java 垃圾回收#xff08;GC#xff09;算法详解目标#xff1a;把 “Java 是怎么判断对象能不能回收”、以及 “具体用什么算法回收” 讲清楚#xff0c;并顺手把它们和 HotSpot 的分代收集、常见收集器联系起来。1. GC 要解决的核心问题 Java 的自动内存管理主要解决两件…Java 垃圾回收GC算法详解目标把“Java 是怎么判断对象能不能回收”、以及“具体用什么算法回收”讲清楚并顺手把它们和 HotSpot 的分代收集、常见收集器联系起来。1. GC 要解决的核心问题Java 的自动内存管理主要解决两件事判断哪些对象“死了”不可达用什么方式回收它们占用的内存算法与实现真正的回收动作本质上就是围绕这两件事在做工程取舍吞吐量、延迟STW、内存碎片、CPU 开销、并发复杂度等。2. 对象“是否存活”的判定可达性分析Reachability Analysis2.1 引用计数法Reference Counting——理论简单Java 主流不使用思路对象有一个计数器引用 1取消引用 -1计数为 0 就回收。致命问题无法解决循环引用。A - B B - AA、B 互相引用计数都不为 0但其实外界已经不可达了导致内存泄漏。HotSpot 主流采用可达性分析而不是引用计数。2.2 可达性分析从 GC Roots 出发“找活人”思路把一批“肯定活着的对象”当作根GC Roots从根出发沿引用链遍历能走到的对象存活走不到的对象可回收GC Roots 常见来源非常重要虚拟机栈栈帧中的引用局部变量方法区静态变量中的引用方法区中常量引用字符串常量池等JNI 引用Native 方法里持有的对象活跃线程对象、同步锁持有的对象如synchronized关联的 Monitor“为什么局部变量没置 null 也会被回收”因为 JIT 可能做逃逸分析/标量替换/栈上分配或者优化掉某些引用的作用域能否回收取决于可达性不是你“看起来还在变量里”。3. GC 算法的“基本动作”不管你用什么收集器核心操作通常就是这几个步骤的组合标记Mark找出要回收/要保留的对象清除Sweep把不可达对象的内存释放整理Compact把存活对象挪一挪消除碎片复制Copy把存活对象复制到另一块区域天然紧凑不同算法的差异就是怎么标记怎么释放是否移动对象是否产生碎片是否需要额外空间是否能并发4. 四大经典 GC 算法4.1 标记-清除Mark-Sweep流程从 GC Roots标记存活对象扫描堆把未标记对象的内存清除优点实现简单不需要移动对象对象地址稳定缺点内存碎片多大量不连续空洞影响分配效率清除阶段可能扫描成本高回收前 [A][B][C][D][E] 回收后 [A][ ][C][ ][E] - 产生碎片适用场景对象移动成本高的场景但现代 JVM 更多用整理或区域化来解决碎片4.2 标记-整理Mark-Compact流程标记存活对象把存活对象往一侧紧凑搬迁直接清理掉边界外的空间优点无碎片内存连续分配效率高bump-the-pointer 线性分配缺点移动对象成本高需要更新引用指针修正STW 时间可能更长实现也更复杂回收前 [A][ ][C][ ][E] 整理后 [A][C][E][ ][ ]适用场景老年代回收常用对象存活率高复制不划算碎片又不能忍4.3 复制算法Copying / Semi-space流程把内存分成两块From、To只用 From 分配对象回收时把存活对象复制到 To并让它们紧凑排列交换 From/To优点回收速度快只复制存活对象天然无碎片分配非常快线性指针缺点空间浪费需要一块等大备用区理论上 50%对象存活率高时复制成本高适用场景新生代大部分对象“朝生夕死”存活率低复制非常划算4.4 分代收集Generational Collection这不是单独的一种“微观算法”而是一种宏观策略基于经验规律绝大多数对象生命周期很短熬过多次 GC 的对象更可能长期存活。因此把堆分成新生代Young对象创建集中、死亡率高 → 用复制算法老年代Old对象存活率高 → 用标记-清除/标记-整理/区域化算法新生代的典型结构HotSpot 常见EdenSurvivor0S0Survivor1S1对象一般在 Eden 分配Minor GC 时把 Eden 一个 Survivor 里的存活对象复制到另一个 Survivor达到阈值就晋升到老年代。5. 现代 GC 里的关键技术点算法落地必备5.1 STWStop-The-World为了保证对象图一致性GC 在某些阶段需要暂停应用线程Mutator。目标就是尽量缩短 STW甚至让多数工作并发做完。5.2 写屏障Write Barrier与记忆集Remembered Set分代收集有个麻烦老年代对象可能引用新生代对象。Minor GC 只回收新生代时如果每次都全堆扫描找这种引用成本爆炸。解决写屏障 Card Table / Remembered Set对象引用发生写入时如oldObj.field youngObj通过写屏障把对应“卡页”标记为脏Minor GC 时只扫描这些脏卡对应的老年代区域即可5.3 三色标记Tri-color Marking与并发标记问题并发标记时应用线程也在改引用会出现漏标本该活着但没标到 → 这是致命错误多标本该死但被标了 → 只是浮动垃圾下一轮再收现代并发 GC如 CMS/G1/ZGC/Shenandoah都会用SATBSnapshot-At-The-Beginning或增量更新Incremental Update配合写屏障来解决一致性问题。6. 把“算法”映射到 HotSpot 常见收集器快速对号入座收集器Collector是“工程实现”它们内部会组合使用上面的算法。6.1 Serial / ParNew新生代复制算法STWSerial 单线程ParNew 多线程6.2 Parallel Scavenge新生代复制算法目标偏吞吐量Throughput6.3 Serial Old / Parallel Old老年代标记-整理为主STW主要用于吞吐量场景6.4 CMS老年代已逐步被替代标记-清除 并发标记优点低停顿缺点碎片问题、并发失败Concurrent Mode Failure、对 CPU 压力大6.5 G1面向服务端默认/主流之一堆划分为多个 Region整体是“分代 区域化 标记整理局部”通过预测模型控制停顿时间Pause Time Goal通过Mixed GC同时回收部分老年代 Region6.6 ZGC / Shenandoah超低停顿重点是“并发移动对象 并发标记”依赖读/写屏障与复杂的指针染色等技术目标极低 STW通常毫秒级甚至更低代价是实现复杂、对平台/版本依赖更强面试时可以这么收口经典算法讲原理收集器讲工程权衡新生代倾向复制老年代倾向整理/区域化低停顿靠并发 屏障。7. 常见问题与面试“易错点”7.1 为什么新生代适合复制老年代不适合新生代存活率低 → 复制少量对象成本低速度快老年代存活率高 → 复制对象多成本高还需要等大备用空间不划算7.2 标记-清除为什么会影响性能碎片导致分配慢可能触发更多 GC大对象分配可能因为找不到连续空间而失败需要整理或 Full GC7.3 什么是浮动垃圾并发标记期间新产生的垃圾可能没被本轮标记识别出来例如 SATB 语义下它们会留到下一轮回收。这不是 bug是并发 GC 的设计权衡。8. 一句话总结存活判定可达性分析GC Roots基础算法标记-清除、标记-整理、复制宏观策略分代收集年轻代复制、老年代整理/区域化现代优化并发标记 写屏障 记忆集 三色标记一致性9. 推荐延伸阅读可选《深入理解 Java 虚拟机》周志明—— GC 部分是面试高频OpenJDK / HotSpot 源码 JEP了解 G1/ZGC 的设计动机与边界
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站下要加个备案号 怎么做如何自己创作一个游戏

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2025/12/25 23:02:08 网站建设

大型网站制作设计网站建设与维护期中试卷

性能的挑战与React的响应:静态提取的艺术各位同仁,下午好。今天,我们将深入探讨一个在现代前端开发领域具有里程碑意义的技术:Static Extraction,即“静态提取”。尤其是在React生态系统中,随着React Compi…

张小明 2025/12/25 23:01:35 网站建设

深圳网站设计收费外贸英文网站模板

技术实践观察地址: Calculator Game 摘要: 数字计算游戏(如 24 点)的前端实现,是对UI状态管理和表达式语法树解析的一次深度考验。本文将探讨如何利用现代前端框架的响应式系统(Reactivity System&#xf…

张小明 2025/12/27 1:46:24 网站建设

商城网站建设找谁做浮动定位网页设计作业

对前端开发者而言,学习算法绝非为了“炫技”。它是你从“页面构建者”迈向“复杂系统设计者”的关键阶梯。它将你的编码能力从“实现功能”提升到“设计优雅、高效解决方案”的层面。从现在开始,每天投入一小段时间,结合前端场景去理解和练习…

张小明 2025/12/25 23:00:31 网站建设

网站建设水平汽车网址导航大全

如何用SlopeCraft打造震撼的Minecraft立体地图画:完整指南 【免费下载链接】SlopeCraft Map Pixel Art Generator for Minecraft 项目地址: https://gitcode.com/gh_mirrors/sl/SlopeCraft 你是否曾想在Minecraft中创作出层次分明的立体地图画,却…

张小明 2025/12/25 22:59:58 网站建设

着力规范网站集约化建设wordpress 修改版权

DNVGL-ST-0126风机支撑结构完整指南:权威标准与工程实践 【免费下载链接】DNVGL-ST-0126风机支撑结构资源下载介绍 DNVGL-ST-0126风机支撑结构资源为工程师和技术人员提供了全面的标准和技术支持,涵盖设计、制造、测试和验收等关键环节。通过下载资源文件…

张小明 2025/12/27 1:07:23 网站建设