Java 面试高频题:GC 到底回收了什么、怎么回收、啥时候回收?

小时候看《西游记》,最佩服的不是孙悟空,而是太上老君。为啥?他能炼丹!一炉子东西,能把杂质统统烧掉,留下最精华的“仙丹”。

其实 Java 的垃圾回收机制,就有点像太上老君的“炼丹炉”——在内存这座“丹炉”里,把没用的对象统统清理掉,只留下我们真正需要的“对象仙丹”。

面试故事开场:HR的一句话,把我问住了!

某天,是我在南京面试某十八线大厂 Java 高级工程师岗位的第五轮。前四轮都挺顺,技术栈、项目经历、架构设计、数据库优化,我答得游刃有余。

直到第五轮,面试官推了下眼镜,淡淡问了句:

“能不能聊聊 Java 的垃圾回收机制?重点说说有哪些垃圾收集器、什么时候触发 Full GC、你在项目中遇到过哪些 GC 问题?”

那一刻,我脑袋一热:“完了,这题目,我背是背过,但从没系统整理过!”

冷静下来,我决定用讲故事的方式,把我对 GC 的理解娓娓道来。

为什么要有垃圾回收机制?

Java 的设计初衷之一,就是让开发者不用手动管理内存

不像 C/C++ 要 malloc() 和 free(),Java 世界里,对象的生命管理由 JVM 全权负责,这就是“垃圾回收”(Garbage Collection,简称 GC)。

但要自动化,就要代价。GC 虽好,也会“卡顿”甚至“误杀”。所以我们得深刻理解它,才能用好它。

GC 的基本原理:谁才是“垃圾”?

垃圾回收的第一步,就是判断“哪些对象是垃圾”。

那怎么判断呢?JVM 提供了两种常见方法:

1. 引用计数法(已被淘汰)

每个对象有个引用计数器,谁引用它,计数 +1,谁不引用了,计数 -1,计数为 0 就回收。

问题是:循环引用无法解决!

举个例子:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件求生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值