JVM垃圾收集机制
一 垃圾收集
垃圾收集(Garbage Collection,GC)是一项比Java更久远的技术。在这里我们主要探讨Java堆的垃圾收集。
二 Java中GC的过程
- 1. 判断对象是否已死
- 2. 垃圾收集
三 对象已死吗?
1. 判断对象是否已死的方法:可达性分析算法
在我们的认知里,可能比较熟悉的是:引用计数法判断一个对象是否还有用,其实引用计数法是有缺陷的,比如说,如果出现循环引用的情况,虽然这些对象已经不可能再被使用了,但是因为还有引用指向它们,这些对象就不能被垃圾收集齐回收,这种现象是有问题的。下图是循环引用的案例:
其实在JVM的世界里,判断一个对象是否已死,采用的不是引用计数算法,而是可达性分析算法。
哪些对象可以当做GC Roots呢?
- 虚拟机栈中引用的对象
- 本地方法栈中引用的对象
- 方法区内存中静态属性引用的对象
- 方法区内存中常量引用的对象
2. 生存还是死亡?
三 垃圾收集算法