当前位置: 移动技术网 > IT编程>数据库>MongoDB > 2020年3月1日JVM面试记录

2020年3月1日JVM面试记录

2020年03月09日  | 移动技术网IT编程  | 我要评论

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

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

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

就是不能解决循环依赖的问题。看下图解释:

 

 

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

 

 


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

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

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网