2020年3月1日JVM面试记录

2020年3月1日JVM面试记录

1、jvm怎么判断哪些对象应该回收呢
回答:引用计数算法和可达性分析算法

因为引用计数法的算法是这样的:在对象中添加一个引用计数器,每当一个地方引用它时,计数器就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。

但是这样的算法有个问题,是什么呢?

 

 

Object 1和Object 2其实都可以被回收,但是它们之间还有相互引用,所以它们各自的计数器为1,则还是不会被回收。
所以,Java虚拟机没有采用引用计数法。它采用的是可达性分析算法。
可达性分析算法的思路就是通过一系列的“GC Roots”,也就是根对象作为起始节点集合,从根节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为引用链,如果某个对象到GC Roots间没有任何引用链相连。
用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。所以此对象就是可以被回收的对象。


你刚刚谈到了根节点,那你知道哪些对象可以作为根对象吗?

你刚刚谈到了引用,那你知道java里面有哪几种引用吗?

你刚刚谈到了可达性分析算法,那如果在该算法中被判定不可达对象,是不是一定会被回收呢?

谈谈你熟悉的垃圾回收器和他们的工作过程?