当前位置: 首页 > article >正文

java面试必问24:Java 垃圾回收机制:从对象判死到分代回收,一篇讲透

Java 垃圾回收机制从对象判死到分代回收一篇讲透面试官“Java 如何判断一个对象可以被回收”你“两种方式引用计数法和可达性分析。主流 JVM 使用可达性分析从 GC Roots 出发不可达的对象就是垃圾。”面试官“那 GC Roots 包括哪些引用计数法有什么缺陷”你“……”很多人能背出“可达性分析”但一问到具体算法、分代回收原理、GC Roots 细节就卡壳了。本文从对象死亡判定到垃圾回收算法结合 HotSpot 实现彻底讲透 Java 垃圾回收机制。一、垃圾回收GC是什么垃圾回收是指自动管理内存的一种机制自动识别并回收不再使用的对象释放内存空间。Java 程序员不需要手动free或deleteJVM 会帮我们完成这项工作。垃圾回收的核心问题有两个哪些内存需要回收—— 对象死亡判定如何回收—— 垃圾回收算法二、判断对象死亡的两种方式1. 引用计数法Reference Counting原理每个对象维护一个引用计数器每当有一个地方引用它计数器 1引用失效时计数器 -1。计数器为 0 的对象就是垃圾。优点简单高效实时性好可以立即回收垃圾。缺点致命缺陷循环引用对象 A 引用 BB 引用 A除此之外无其他引用。两者计数器都不为 0永远不会被回收导致内存泄漏。需要额外空间存储计数器且加减操作频繁。应用Python、PHP 等语言早期使用但都搭配了其他算法解决循环引用。JVM 没有采用引用计数法。2. 可达性分析Reachability Analysis原理从一组称为GC Roots的根对象出发通过引用链向下搜索形成引用网络。在这个网络中的对象是“可达”的存活不在网络中的对象就是“不可达”的可回收。优点天然解决循环引用问题——A 和 B 互相引用但如果它们没有任何 GC Roots 引用就会被判定为不可达一起回收。GC Roots 包括虚拟机栈栈帧中的局部变量表中引用的对象方法区中静态属性引用的对象如static字段方法区中常量引用的对象如final常量本地方法栈中 JNI 引用的对象Native 方法Java 虚拟机内部的引用基本类型的 Class 对象、常驻异常对象等所有被同步锁synchronized持有的对象反映 Java 虚拟机内部情况的 JMXBean、JVMTI 回调等注意即使对象被可达性分析判定为不可达也不一定会立即回收。它至少需要经过两次标记过程第一次标记并筛选是否执行finalize()第二次标记真正回收。finalize()方法已被 JDK 9 标记为废弃不推荐使用。结论HotSpot JVM 采用可达性分析作为对象存活判定算法。三、常见垃圾回收算法有了“哪些是垃圾”接下来就是“如何回收垃圾”。垃圾回收算法是垃圾收集器实现的理论基础。1. 标记-清除Mark-Sweep过程标记遍历所有 GC Roots标记出所有存活对象。清除线性遍历堆内存回收所有未被标记的对象的内存。图示初始: [A][B][C][D][E] A、C、E 存活 标记后: [✓][×][✓][×][✓] ✓存活×垃圾 清除后: [A][ ][C][ ][E] 内存碎片优点简单不需要移动对象。缺点效率问题标记和清除都需要遍历对象越多越慢。空间碎片清除后产生大量不连续内存碎片导致大对象无法分配提前触发另一次 GC。应用场景CMS 收集器的“并发清除”阶段使用了标记-清除算法的变种。2. 复制算法Copying过程将内存分为大小相等的两块From 和 To每次只使用其中一块。当这一块用满时将存活对象复制到另一块然后一次性清空当前块。图示初始: From [A][B][C][D] To [空] 存活 A、C → 复制到 To From 清空: From [空] To [A][C] 交换角色: From [A][C] To [空]优点实现简单运行高效只需移动指针无需处理碎片。无内存碎片分配新对象时只需指针碰撞bump-the-pointer。缺点内存利用率低只能用一半内存。对象存活率高时复制开销大。应用新生代 GC如 Serial、ParNew、Parallel Scavenge因为新生代对象存活率低适合复制算法。HotSpot 将新生代分为 Eden Survivor两块通常是 8:1:1而不是 1:1提高了内存利用率。3. 标记-整理Mark-Compact过程标记与标记-清除相同标记存活对象。整理将所有存活对象向一端移动然后直接清理边界以外的内存。图示标记后: [A][×][C][×][E] A、C、E 存活 整理后: [A][C][E][ ][ ] 存活对象靠左右边空闲连续优点无内存碎片适合老年代对象存活率高。缺点移动对象需要更新所有引用地址成本比标记-清除高。应用老年代 GC如 Serial Old、Parallel Old。4. 分代回收Generational Collection核心思想根据对象存活周期的不同将堆内存划分为不同区域采用最适合的回收算法。HotSpot 堆划分新生代Young Generation对象存活率低使用复制算法。分为 Eden 区和两块 Survivor 区From 和 To默认比例 8:1:1。老年代Old Generation对象存活率高使用标记-清除或标记-整理算法取决于收集器。为什么分代有效大部分对象朝生夕灭如局部变量、临时对象。老年代对象生命周期长回收频率低。分代可以针对不同区域采用不同策略提升整体效率。对象晋升Promotion新生代经过多次 GC 仍存活的对象会晋升到老年代。大对象超过阈值直接分配到老年代。卡表Card Table用于记录老年代对新生代的引用避免每次 Young GC 都扫描整个老年代。四、垃圾回收算法对比算法内存利用率碎片问题移动对象适用场景标记-清除100%有否老年代CMS复制50%或更高如 90% 通过 Survivor无是新生代标记-整理100%无是老年代分代回收高组合使用基本无部分综合五、常见面试追问Q1引用计数法为什么不用于 JVM循环引用无法解决例如 A 引用 BB 引用 A且外部没有引用计数器永远不为 0内存泄漏。Q2可达性分析中的 GC Roots 包括哪些见上文列表。尤其注意被synchronized持有的对象、JNI 全局引用、活跃线程等也是 GC Roots。Q3标记-清除和标记-整理的区别标记-清除不移动对象产生碎片标记-整理移动对象消除碎片但成本更高。Q4为什么新生代使用复制算法新生代对象存活率低每次回收只有少量对象存活复制开销小且无碎片。通过 Survivor 分区8:1:1内存浪费仅 10%可接受。Q5直接调用System.gc()会发生什么会建议 JVM 执行 Full GC但 JVM 不保证立即执行。频繁调用会严重影响性能应避免。Q6finalize()方法的作用和问题对象被回收前如果覆盖了finalize()会被调用仅一次。但该方法执行时间不确定且可能“复活”对象已被 JDK 9 标记为废弃。推荐使用try-with-resources或Cleaner。六、总结判定方式核心优缺点引用计数法计数器简单但无法解决循环引用可达性分析GC Roots 引用链无循环引用问题主流方案回收算法核心适用区域标记-清除标记 清除老年代CMS复制分半复制新生代标记-整理标记 移动老年代Serial Old、Parallel Old分代回收组合策略整个堆一句话记住垃圾回收可达分析判生死分代回收用对法新生复制老整理标记清除防碎片。垃圾回收算法是理解 JVM 调优和选择垃圾收集器的基础。掌握这些原理才能看懂 GC 日志、优化停顿时间、排查内存问题。希望这篇文章能帮你彻底掌握 Java 垃圾回收机制欢迎继续讨论。

相关文章:

java面试必问24:Java 垃圾回收机制:从对象判死到分代回收,一篇讲透

Java 垃圾回收机制:从对象判死到分代回收,一篇讲透面试官:“Java 如何判断一个对象可以被回收?” 你:“两种方式:引用计数法和可达性分析。主流 JVM 使用可达性分析,从 GC Roots 出发&#xff0…...

Linux /tmp 目录管理

Linux 会自动清理 /tmp 目录,但清理的频率、具体行为取决于你的系统配置和发行版。主要有以下几种机制:1. 基于 systemd 的系统(大多数现代发行版,如 Ubuntu、Debian、CentOS 等)通过 systemd-tmpfiles 服务管理。清理…...

AI智能体开发实战:AgentGym平台架构解析与自定义智能体接入指南

1. 项目概述:一个面向智能体开发者的“健身房”最近在开源社区里,我注意到一个名为WooooDyy/AgentGym的项目热度在悄然攀升。对于像我这样长期关注并实践AI智能体(AI Agent)开发的从业者来说,这个名字本身就充满了吸引…...

MS2130芯片HDMI采集棒性能解析与应用指南

1. MS2130芯片HDMI采集棒深度解析最近在AliExpress上出现了一批基于MacroSilicon MS2130芯片的HDMI视频采集棒,售价仅19美元还包邮。这类设备在直播推流、游戏录制、视频会议等场景有着广泛的应用需求。作为从业多年的视频技术工程师,我将从硬件设计、性…...

springboot和Vue3的体育馆场地预约管理系统的设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分技术栈组合数据库设计要点安全防护措施扩展性设计部署方案项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 后端&…...

碳交易与需求响应双轮驱动的综合能源系统优化运行软件

考虑需求响应和碳交易的综合能源系统日前优化调度模型 关键词:柔性负荷 需求响应 综合能源系统 参考:私我 仿真平台:MATLAB yalmipcplex 主要内容:在冷热电综合能源系统的基础上,创新性的对用户侧资源进行了细致的划…...

AI Summit London 2022参会价值与实战策略

1. 项目概述:AI Summit London 2022参会机会解析作为全球人工智能领域最具影响力的行业峰会之一,AI Summit London每年吸引着来自科技巨头、初创企业、学术机构和政府部门的顶尖专家。2022年这场盛会尤其值得关注——根据官方披露的数据,当年…...

【数据结构】图-----关键路径

一、核心前提AOE 网:有向无环、带权边,边代表活动,顶点代表事件;源点(起点:入度为 0)、汇点(终点:出度为 0)。关键路径:从源点 → 汇点的最长路径…...

为什么你的AI容器仍能读取宿主机GPU内存?一文讲透nvidia-container-runtime沙箱边界漏洞(含PoC修复验证)

更多请点击: https://intelliparadigm.com 第一章:Docker Sandbox 运行 AI 代码隔离技术 面试题汇总 Docker Sandbox 是面向 AI 研发场景的关键安全实践,通过容器级资源隔离、只读文件系统、非 root 用户运行及 cgroup 限制,确保…...

为什么92%的边缘项目在Docker WASM迁移中失败?6步标准化流程+4类典型崩溃日志诊断图谱

更多请点击: https://intelliparadigm.com 第一章:Docker WASM边缘计算部署的现状与挑战 WebAssembly(WASM)正加速融入边缘计算生态,而 Docker 官方尚未原生支持 WASM 运行时——当前需依赖社区方案如 wasi-sdk、wasm…...

2026届毕业生推荐的十大AI辅助论文网站解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 如今,AI论文查重系统主要依靠自然语言处理跟深度学习技术,借助分析文…...

如何快速掌握OpenFace面部行为分析:新手到专家的完整实战指南

如何快速掌握OpenFace面部行为分析:新手到专家的完整实战指南 【免费下载链接】OpenFace OpenFace – a state-of-the art tool intended for facial landmark detection, head pose estimation, facial action unit recognition, and eye-gaze estimation. 项目地…...

B站视频下载终极指南:轻松获取4K大会员视频的完整教程

B站视频下载终极指南:轻松获取4K大会员视频的完整教程 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为无法离线观看…...

3分钟搞定QMC加密音频:你的专属音乐解锁秘籍

3分钟搞定QMC加密音频:你的专属音乐解锁秘籍 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经遇到过这样的情况:从音乐平台下载的歌曲&…...

MCP 2026配置为何让CTO深夜删库重装?血泪复盘3起因配置项顺序错误导致的P0级数据泄露事件(含原始审计日志截图)

更多请点击: https://intelliparadigm.com 第一章:MCP 2026医疗数据安全配置标准全景概览 MCP 2026(Medical Configuration Policy 2026)是由国际医疗信息技术联盟(IMITF)于2024年Q4正式发布的强制性安全配…...

高压均质机的构造与工作原理解析

于乳业加工的生产车间里,有一台设备。在制药制备的生产车间里,同样有一台设备。在纳米材料的生产车间里,仍有一台设备。此设备在关键工序里,担当着决定性的角色。物料经由它处理后,粒径一下子迅速变细。物料经由它处理…...

【MCP 2026边缘部署黄金法则】:20年架构师亲授7步极简优化流程,错过再等三年

更多请点击: https://intelliparadigm.com 第一章:MCP 2026边缘部署的范式跃迁 MCP(Model Control Plane)2026标志着边缘智能基础设施从静态编排向动态语义驱动的范式跃迁。传统边缘部署依赖预置规则与固定拓扑,而MCP…...

泵人心中很清楚的HPH构造——三大系统和常见故障全面解析

近日来,科技创新范畴热闹得很。于今日在合肥拉开帷幕的第四届中国(安徽)科技创新成果转化交易会上,892项科技新成果集体首次亮相,涵盖了氢能装备,核聚变能,量子科技等好些前沿领域。碰巧的是&am…...

批量卸载工具Bulk Crap Uninstaller:3分钟彻底清理Windows垃圾软件

批量卸载工具Bulk Crap Uninstaller:3分钟彻底清理Windows垃圾软件 【免费下载链接】Bulk-Crap-Uninstaller Remove large amounts of unwanted applications quickly. 项目地址: https://gitcode.com/gh_mirrors/bu/Bulk-Crap-Uninstaller 你是否经常发现电…...

数论:从提高组到提高组

这&#xff0c;是一个采用C精灵库编写的程序&#xff0c;它画了一幅漂亮的图形&#xff1a; 复制代码 #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle void draw(int d){for(int i0;i<5;i)turtle.fd(d).left(72); } int main(){ …...

Ant Design Pro实战:手把手教你用ProTable的request属性优雅处理API分页与数据转换

Ant Design Pro实战&#xff1a;ProTable的request属性深度解析与数据转换艺术 在复杂的企业级前端开发中&#xff0c;数据表格的处理往往占据了开发者大量的时间和精力。Ant Design Pro的ProTable组件通过封装常见的表格交互逻辑&#xff0c;显著提升了开发效率。但当我们面对…...

别再自己画验证码了!Vue3项目里用这个npm包5分钟搞定滑动拼图(附Element Plus适配)

Vue3Element Plus项目中5分钟集成滑动拼图验证码的终极指南 在快节奏的前端开发中&#xff0c;验证码功能是保护系统安全的基础防线&#xff0c;但自行开发往往耗时费力。本文将带你绕过Canvas绘制的技术深坑&#xff0c;直接使用vue3-puzzle-vcode这个专为Vue3设计的验证码组…...

android 原生桌面上有一个搜索栏图标,如何去掉?

android 原生桌面上有一个搜索栏图标&#xff0c;如何去掉&#xff1f;下载下面的资源解决&#xff01;通过网盘分享的文件&#xff1a;去掉桌面的google图标-2.zip 链接: https://pan.baidu.com/s/15FFPgw-O0FCyZBi99o_MXg?pwd27dm 提取码: 27dm...

创业做智能音箱可以做吗?

本文针对当前百元级智能音箱市场成本结构与主流芯片方案进行分析,对比 ESP32 系列与联发科 Filogic 130A 等专用语音芯片在硬件成本、算力架构、低功耗待机、远场语音识别等方面的差异,论证 ESP32 替代高端专用 DSP 芯片的可行性边界,并给出面向不同产品定位的选型建议,为语…...

国产服务器适配MCP 2026的“最后一公里”难题(独家拆解):BIOS微码更新失败、TPM2.0固件版本冲突、SM2国密模块初始化超时——3个99%工程师踩过的硬核深坑

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;MCP 2026国产化适配的全局技术图谱与挑战定位 MCP&#xff08;Model Control Protocol&#xff09;2026 是面向高可信智能系统的新一代控制协议标准&#xff0c;其国产化适配不仅涉及指令集、操作系统与…...

紧急预警:MCP 2026 V2.1草案已冻结,2025年1月起全面启用新诊断协议(UDS over CAN FD),现有ECU固件兼容率不足41%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;MCP 2026农业设备数据对接的演进逻辑与战略紧迫性 农业智能化正从单点自动化迈向全域协同决策&#xff0c;而MCP&#xff08;Machine Communication Protocol&#xff09;2026标准的落地&#xff0c;已…...

【限时解密】Docker AI Toolkit 2026未发布文档中的AI容器签名机制(基于Cosign+WebAssembly验证链源码溯源)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker AI Toolkit 2026 架构演进与签名机制设计动机 Docker AI Toolkit 2026 并非简单叠加 AI 功能的容器工具包&#xff0c;而是面向生产级可信 AI 工作流重构的系统性平台。其核心演进方向聚焦于**模…...

Golang interface底层实现原理_Golang接口原理教程【核心】

...

权限收敛迫在眉睫,MCP 2026动态分配已强制启用?企业IT负责人必须在Q3前完成的7项合规改造

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;MCP 2026权限动态分配的合规背景与强制启用倒计时 随着《全球数字身份与访问治理框架&#xff08;GDIAF&#xff09;2025》正式生效&#xff0c;MCP&#xff08;Multi-Context Privilege&#xff09;协…...

MCP 2026跨服务器编排落地手册(2024Q4唯一兼容RFC-9321的工业级方案)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;MCP 2026跨服务器编排的核心演进与RFC-9321对齐原理 MCP 2026&#xff08;Multi-Cluster Protocol 2026&#xff09;标志着分布式系统控制平面从单集群协调迈向全域协同的关键跃迁。其核心演进聚焦于状…...