117

问答题 117 /393

请你回答一下怎么判断哪些对象是可以删除的,可达是什么意思

参考答案

参考回答:

判断方法有两种,一种是引用计数器,给对象添加一个引用计数器,每当有一个地方引用他时,计数器就加一,引用失败计数器减一,计数器为零的对象就不可能再被使用,

第二种方法是可达性分析算法。这个算法的基本思路就是通过一系列的称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连的时候,则证明此对象是不可用的。否则即是可达的。在java语言中,可作为GC Roots的对象包括下面几种:虚拟机栈中引用的对象、方法区中类静态属性引用的对象、方法区中常量引用的对象和本地方法栈中JNI(一般说的Native方法)引用的对象。