JVM

一般有两种方法来判断:

  • 引用计数器:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题;
  • 可达性分析:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是可以被回收的。

作为GC Roots的对象包括下面几种:

  • 虚拟机栈(栈帧中的本地变量表)中引用的对象。(正在运行当中,是活的)
  • 本地方法栈中JNI(即一般说的Native方法)引用的对象。
  • 方法区中Static类静态属性引用的对象。Static User u = new User();
  • 方法区中Final常量引用的对象。public final Static User u = new User()

原文地址:https://www.cnblogs.com/frankcui/p/14141331.html