JVM垃圾收集机制

一 垃圾收集

垃圾收集(Garbage Collection,GC)是一项比Java更久远的技术。在这里我们主要探讨Java堆的垃圾收集。

二 Java中GC的过程

  • 1. 判断对象是否已死
  • 2. 垃圾收集

三 对象已死吗?

JVM垃圾收集机制

1. 判断对象是否已死的方法:可达性分析算法

在我们的认知里,可能比较熟悉的是:引用计数法判断一个对象是否还有用,其实引用计数法是有缺陷的,比如说,如果出现循环引用的情况,虽然这些对象已经不可能再被使用了,但是因为还有引用指向它们,这些对象就不能被垃圾收集齐回收,这种现象是有问题的。下图是循环引用的案例:

JVM垃圾收集机制

其实在JVM的世界里,判断一个对象是否已死,采用的不是引用计数算法,而是可达性分析算法。

JVM垃圾收集机制

哪些对象可以当做GC Roots呢?

  • 虚拟机栈中引用的对象
  • 本地方法栈中引用的对象
  • 方法区内存中静态属性引用的对象
  • 方法区内存中常量引用的对象

2. 生存还是死亡?

JVM垃圾收集机制

三 垃圾收集算法

JVM垃圾收集机制

JVM垃圾收集机制

JVM垃圾收集机制

JVM垃圾收集机制