课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
垃圾回收是程序员在学习java编程开发虚拟机的时候需要重点掌握的编程技术之一,而今天我们就再来了解一下,java编程中垃圾回收的判断方法是什么。
1、引用计数
实现的思路是,给每个对象添加一个引用计数器,每当有其他的对象引用了这个对象,就把引用计数器的值+1,如果一个对象的引用计数为0则说明没有对象引用它。
乍一看是没有问题的,那为什么Java并没有采取这种呢?
想象一下这个场景,一个函数中定义了两个对象O1和O2,然后O1引用了O2,O1又引用了O1,这样一来,两个对象的引用计数器都不为0,但是实际上这两个对象再也不会被访问到了。
所以我们需要另外一种方案来解决这个问题。
2、可达性分析
可达性分析可以理解为一棵树的遍历,根节点是一个对象,而其子节点是引用了当前对象的对象。从根节点开始做遍历,如果发现从所有根节点出发的遍历都已经完成了,但是仍然有对象没有被访问到,那么说明这些对象是不可用的,需要将内存回收掉。
这些根节点有个名字叫做GCRoots,哪些资源可以被当作GCRoots呢?
栈帧中的局部变量所引用的对象
方法区中类静态属性所引用的对象
方法区中常量所引用的对象
本地方法栈所引用的对象
我们刚刚聊过,在引用计数中,如果其引用计数器的值为0,则占用的内存会被回收掉。而在可达性分析中,如果没有某个对象没有任何引用,它也不一定会被回收掉。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。