首页 > 试题广场 >

说说GC的可达性分析。

GC中的可达性分析算法适用于判断对象是否存活。这个算法以根对象为起始节点,,根据引用关系向下搜寻,搜索所经过的路径就是“引用链”,如果一个对象没有任何引用链,就说明该对象不会再被使用,要被垃圾回收。常见的GCroot对象:方法区中的静态属性变量。所有堆中实例化对象。方法区中常量池引用对象
发表于 2022-06-23 11:24:33 回复(1)
可达性分析算法用于判断对象是否可以被回收,程序通过GC Roots中的对象为起点,以类之间的引用关系简历引用链,最终形成一个类似于数据结构中森林的一个结果,不存在与森林中的对象便是需要被回收的对象。这里的GC Roots主要包括线程栈中引用的变量,本地方法栈中引用的变量,方法区中的静态引用对象,常量池中的常量引用对象和被锁引用的对象。对一个对象真正的宣告回收需要经历两次标记过程,如果一个对象不再引用链上就会对它进行第一次标记,并判断它是否重新了finalize方法,若未重新或finalize方法已经被执行过了则会直接回收对象,否则会创建一个F-queue队列来存储这些对象,并启动一个低优先级的Finalizer线程去执行它们的finalize方法。第二次标记,稍后收集器会对队列中的对象进行可达性分析并标记,若仍然存在标记则表明该对象没有通过finalize方法实现自救则直接回收,否则对象复活。任何对象的finalize方法都只能被调用一次。
发表于 2022-07-25 11:34:14 回复(0)
可达性分析算法用于判断对象是否可以被回收,程序通过GCRoots中的对象为起点以类之间的引用关系建立引用链,最终形成一个类似于数据结构中森林的一个结果,不存在与森林中的对象便是需要被回收的对象。这里的GcRoots主要包括线程栈中引用的变量,本地方法栈中引用的变量,方法区中的静态引用对像,常量池中的常量引用对象和被锁引用的对象。对一个对象真正的宣告回收需要经历两次标记过程,如果一个对象不在引用链上就会对他进行第一次标记,并判断它是否重新了finalize方法,若未重写或finalize方法已经被执行过了则会直接回收对象,否则会创建一个F-queue队列来存储这些对象,并启动一个低优先级的Finalizer线程区执行它们的finalize方法。第二次标记,稍后收集器会对队列中的对象进行可达性分析并标记,若任然存在标记则表明该对象没有通过finalize方法实现自救则直接回收,否则对象复活。任何对象的finalize方法都只会被调用一次。
发表于 2022-05-18 16:36:50 回复(0)
gc可达性就是 根据可行性算法 判断对象是否存活 以跟对象为起始节点 根据引用关系向下搜索 搜索的路径就是 引用链 如果 一个对象 没有任何引用链 就被回收
发表于 2023-08-22 09:03:10 回复(0)
可达性分析用于判断对象存活,从被称为GC Roots的根对象出发,遍历所有引用链。将无法到达的对象视为垃圾,需被回收。可达性分析可避免引用计数法产生的循环引用问题。
发表于 2025-06-07 15:53:31 回复(0)
GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的".当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。 注:判断对象"不可达",一般有两种方法,即引用计数法和可达性分析法。 可达性分析:基本思想是通过一系列的“GC Roots”对象作为起点进行搜索,如果在“GC Roots”和一个对象之间没有可达路径,则称该对象是不可达的,不过要注意的是被判定为不可达的对象不一定就会成为可回收对象。被判定为不可达的对象要成为可回收对象必须至少经历两次标记过程,如果在这两次标记过程中仍然没有逃脱成为可回收对象的可能性,则基本上就真的成为可回收对象了。
发表于 2023-08-01 14:43:47 回复(0)
可达性分析的目的是查找可回收对象,对GC roots作为根对象,利用引用关系进行向下查找,这一段路程被称为“引用链”,当对象没有任何引用链证明对象可以回收。常见的根对象为方法区的静态属性变量,方法区中常量池引用对象
发表于 2022-09-03 14:13:57 回复(0)
GC中的可达性分析算法适用于判断对象是否存活。 这个算法以根对象为起始节点,,根据引用关系向下搜寻,搜索所经过的路径就是“引用链”,如果一个对象没有任何引用链,就说明该对象不会再被使用,要被垃圾回收。常见的GCroot对象:方法区中的静态属性变量。堆中实例化对象。方法区中常量池引用对象。
发表于 2025-05-26 16:49:52 回复(0)
判断对象是否死亡的方法,GCRoots由虚拟栈机中的局部变量引用的对象、方法区中的静态变量与常量引用的对象、本地方法中引用的对象、锁持有的对象等构成。从GCRoots开始遍历,访问不到的对象,就会被标记为死亡
发表于 2025-05-01 15:28:50 回复(0)
GC中的可达性分析算法适用于判断对象是否存活。这个算法以根对象为起始节点,,根据引用关系向下搜寻,搜索所经过的路径就是“引用链”,如果一个对象没有任何引用链,就说明该对象不会再被使用,要被垃圾回收。常见的GCroot对象:方法区中的静态属性变量。所有堆中实例化对象。方法区中常量池引用对象
发表于 2025-03-25 11:11:04 回复(0)
基本思路就是通过一系列称为“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”,如果某个对象到GC Roots间没有任何引用链相连,或者用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。
发表于 2025-03-18 21:08:10 回复(1)
以GCROOT开始,向下搜索,如果有引用则加入引用链。 没被引用的对象则被回收。 虚拟机栈,常量引用的对象,静态常量引用的对象可能会作为gcroot
发表于 2025-03-09 19:20:15 回复(0)
GC Roots、引用链
发表于 2024-09-04 16:42:07 回复(0)
设置GCroot,根据引用关系向下遍历,没有引用链的对象被视为不可达,需要回收。 GCroot:虚拟机栈中引用的对象、方法区中静态属性引用的对象、方法区中常量引用的对象
发表于 2024-08-16 19:42:12 回复(0)
GC的可达性分析是判断对象是否存活的一种方法,通过判断某个对象与GCRoot之间是否存在引用链, 有,则对象存活 否,则对象需要回收 GCRoot:虚拟机栈中引用的对象、方法区中静态属性引用的对象、方法区中常量引用的对象
发表于 2024-07-10 21:43:14 回复(0)
可达性分析的思想是:通过每一个“GC Roots”对象为起点,从这些起点开始向下搜索,节点所走过的路径为引用链,当一个对象到达GC Roots对象没有任何引用链使,说明这个对象为废弃对象
发表于 2024-05-19 19:23:50 回复(0)
GC的可达性分析是判断对象是否存活的一种方法,通过GCRoots开始向下搜索,节点所走过的路径称为引用链,判断引用对象之间是否是可达的,解决了引用计数法之间对象相互引用无法被垃圾回收的问题 GCRoots有哪些: 活着的线程,系统类加载器加载的对象,被锁锁住的对象 引用线程栈帧中的方法参数、局部变量等 引用类中的静态变量
编辑于 2024-04-02 17:42:49 回复(0)
与GCRoot是否还有引用链 有,则不是垃圾,不回收 无,是垃圾,回收 GCRoot: 1、虚拟机栈中引用的对象 2、方法区中的静态变量和常量引用的对象
编辑于 2024-03-16 14:53:25 回复(0)
编辑于 2024-03-08 11:32:08 回复(0)
GC的可达性分析判断对象是否存活,以根对象为起始节点 根据引用关系向下搜寻 如果一个对象没有被引用 表示不会在使用 就会被回收
编辑于 2024-03-05 20:10:06 回复(0)