面试过程中一个问题,JVM中对于对象间循环引用,如何进行回收

class Node { Node next; } Node a = new Node(); Node b = new Node(); a.next = b;
b.next = a;

我说的是用的GC分代算法进行回收,查看了一些博客有用程序计数器,还有GC Roots寻根遍历方法,那现在具体处理方法是啥?求大神解答下
全部评论
现在主流的java虚拟机中都是使用可达性分析算法来判断对象是否存活的,也就是“GC Roots”
点赞 回复 分享
发布于 2017-08-30 11:23
用可达性分析(GC Roots),如果只是循环引用,从GC Roots出发,不会到达这些循环引用的对象。所以会被回收。
点赞 回复 分享
发布于 2017-08-30 11:27
个人理解,相互引用并不能保证不被回收,主要需要查找是否被GC root引用到。
点赞 回复 分享
发布于 2017-08-30 11:29
GCRoot,可达性分析算法,对象是否可以回收,关键是看对象和根节点是否有可达的路径。可以看成是一棵树,对象就是一个节点,根到这个节点有路径的话,就不能回收。反之亦然。
点赞 回复 分享
发布于 2017-08-30 11:32
谢谢了,大神们
点赞 回复 分享
发布于 2017-08-30 12:51

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务