gc 相关简单记录

GC相关一些记录:

Garbage Collection 垃圾收集了解GC 需要弄清楚三个问题:

  1. 回收些什么?
  2. 什么情况下回收?
  3. 如何回收

Java 中的引用类型

  1. 强引用,一般来说直接新建的对象,只要引用还存在就不会被回收
  2. 软引用 SoftReference,内存不足时清理,All soft references to softly-reachable objects are guaranteed to have been cleared before the virtual machine throws an OutOfMemoryError
  3. 弱引用 WeakReference,存活到下次GC,直接回收
  4. 虚引用 PhantomReference,一个对象是否有虚引用的存在,不会对其生存时间产生影响,也无法通过虚引用取得一个对象的引用,它存在的唯一目的是在这个对象被回收时可以收到一个系统通知

如何判断

  • 引用计数法
    有对这个对象的引用就+1,不再引用就-1,但是这种方式看起来简单美好,但它却不能解决循环引用计数的问题。因此可达性分析算法登上历史舞台,用它来判断对象的引用是否存在
  • 可达性算法
    通过一系列称为 GCRoots 的对象作为起始点,从这些节点从上向下搜索,所走过的路径称为引用链,当一个对象没有任何引用链与GCRoots连接时就说明此对象不可用,也就是对象不可达

GC Roots 对象通常包括:

  • 虚拟机栈中引用的对象(栈帧中的本地变量表)
  • 方法中类的静态属性引用的对象
  • 方法区中常量引用的对象
  • Native 方法引用的对象
posted @ 2023-08-22 16:17  阿丟啊  阅读(5)  评论(0编辑  收藏  举报