roots攻略搜寻锈湖攻略
垃圾回收(GC)是Java不同于其他编程语言
哪些内存需要回收,何时可以回收
今天,我们将讨论如何确定谁可以回收JVM
有两种算法
引用计数算法,一致性分析算法
引用计数算法
每次向对象添加引用计数器时,该计数器都会在引用被复盖时插入一个引用,只要该对象的引用始终为零,该计数器就会降到1
该算法简单、高效但存在一定的缺陷
一般的商业JVM是不会这样做的
符合性分析
出于一般商业目的,JVM使用辅助工具分析来确定对象是否可回收
算法的基本思想是
从称为“初始节点集”的一系列节点开始,通过引用关系向下搜索路径称为“引用链”
当你第一次看到这句话的时候是不是很惊讶一开始我不知道作者是什么意思后来我慢慢明白了
若要了解辅助功能演算法,您必须先了解几个问题
65432 + 4R
1.第一名是什么
对象表示两者之间存在直接或间接的引用关系
root或GC root表示对象是直接或间接的引用关系
下面的代码
public class my object { private string object name//object private my object reflection//依赖对象public my object(string object name){ this . object name = object name })public my object(string object name,我的string object refresh){ this . object name = object name这是一个对象名称。刷新=刷新}公共静态声音主(字符串)
假设a是gc roots,b是c,d和e不可用
2、什么是gc roots
在垃圾回收过程中,JVM首先查找所有GC根并暂停用户操作并触发STW操作
然后,从GC Roots中搜索这些根节点,释放可访问的对象,并恢复不可访问的对象
爷爷,GC Roots呢
gc roots是确定JVM当前不可回收的对象(如方法字段中的类静态属性所引用的对象)
只有找到这样的对象,无法恢复或恢复对不可恢复对象的依赖
当JVM首先启动GC时,所有用户的工作流都会到达purpose时间点(STW),然后对根节点进行编号,查找所有GC根,以便访问
即使CMS、g对根节点进行编号,像1这样的收藏者也必须停止用户片段
gc roots是一个自定义对象,在Java运行时它必须是程序的根对象
那么,什么样的物体可以这样做呢?GC Roots呢
3.哪些对象可以用作gc roots
gc roots对象可以分为两类:全局对象和运行时上下文释放器
号
让我们来看看为什么这些对象被认为是gc roots
1.引用方法字段中的静态属性的对象
只要物件本身难以回收,回收条件就非常困难;静态成员不回收
2.方法域常量引用的对象
字串常值也属于一般物件,例如字串常值集区;常数本身在初始化之后不会变更,因此gc roots也是合理的
3.方法堆栈中的帧是本地变量表中引用的对象
在执行阶段,物件是执行阶段方法的执行阶段,它会将方法封装为堆叠影格,并取代堆叠影格
4、引用JNI本地方法堆栈的对象
如前所述,Java方法堆栈中的变量引用本地方法(c,c)堆栈中的变量
5.同时锁定的对象
锁定的物件永远无法复原。目前有一个粒子物件锁。如果GC对象被回收,则不会禁用锁
尾巴吗
也就是说,直接或间接30列出根节点,以确保应用程序正常运行