来判断对象是否存活的基本思路就是通过一系列成为“GC Roots”的对象作为起始点,从政节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象到 GC Roots没有任何引用链相连时则证明此对象是不可用的,作为GC Roots的对象包括下面几种:

  • 虚拟机栈中引用的对象,各个线程调用方法堆栈中使用到的参数、局部变量、临时变量等
  • 方法区中类静态属性引用的对象; java 类的引用类型静态变量
  • 方法区中常量引用的对象; 比如: 字符串常量池里的引用
  • 本地方法栈中 Native 引用的对象

以上的回收都是对象,类的回收条件:

Class要被回收,必须同时满足以下条件

1、该类所有的实例都已经被回收,也就是堆中不存在该类的任何实例

2、加载该类的 classLoader 已经被回收

3、该类对应的 java.lang.Class 对象没有在任何地方被应用,无法再任何地方通过反射访问该类的方法

最后修改于 2021-03-15 17:16:29
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇