Java面试题|JVM如何判断对象可以被回收?

发布于 2021-09-07 11:51 ,所属分类:2021面试经验技巧分享

正文共计1037字|预计阅读时间3分钟


关键词|Java 面试题 免费



为了解决同学们面试中可能遇到的疑难问题,动力节点推出了Java面试专题,帮助同学们快速高效掌握Java面试核心考点。


今天已经更新第29期啦,不知道同学们往期的面试题都掌握了吗?没看的赶紧补课去!gongzhong号聊天窗口回复【面试题】即可获得全部往期面试题哦!



上期我们了解了

JVM什么情况下会发生堆内存溢出

看了老师的视频讲解,相信同学们都get到了答题要点。


今天我们来解答一下,

JVM如何判断对象可以被回收?

先思考一下

点此获取答题思路

JVM如何判断对象可以被回收?

1. 如何判断


在JVM堆里面存放着所有的Java对象,垃圾收集器在对堆进行回收前,首先要确定这些对象之中哪些还“存活”着,哪些已经“死去”;


Java通过 可达性分析

(ReachabilityAnalysis)算法来判定对象是否存活的。


2. 该算法的基本思路


通过一系列称为“GC Roots”的根对象作为起始节点,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”(Reference Chain),如果某个对象到GC Roots间没有任何引用链相连(也称为不可达),则证明此对象是不可能再被使用的对象,就可以被垃圾回收器回收;

对象object 5、object 6、object 7虽然有关联,但它们到GC Roots是不可达的,所以它们将会被判定为可回收的对象;


3.哪些对象可以作为GC Roots


1、在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等所引用的对象;

2、方法区/元空间中的类静态属性引用的对象;

3、方法区/元空间中的常量引用的对象;

4、在本地方法栈中JNI(即通常所说的Native方法)引用的对象;

5、Java虚拟机内部的引用,如基本数据类型对应的Class对象,一些常驻的异常对象(比如NullPointExcepiton、

OutOfMemoryError)等,还有系统类加载器;

6、所有被同步锁

(synchronized关键字)持有的对象;

7、反映Java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等;

8、其他可能临时性加入的对象;


看了答题思路,是不是觉得已经掌握了?要想掌握的更牢固,点击下面视频听大咖老师为你讲解更多精彩细节吧!


视频讲解



|下期预告|

面试题目:谈谈Java中不同的引用类型?

同学们可以先思考一下,答案下期见。



点个在看

面试成功进大厂

相关资源