1.GC是什么?
Garbage Collection,垃圾收集。对于计算机而言,即把没用的垃圾对象清理掉,回收内存。
2.GC的2个步骤
既然要清理垃圾对象,随之而来就是2个问题
1)怎么知道哪些是垃圾对象?
2)知道以后,通过什么方法清理掉?
这就对应了GC中的2个过程
&&标记过程;
&&清除过程;
3.垃圾对象的标记过程
通过什么方法来确定哪些对象是垃圾?
3.1. 引用计数法
对象被引用一次,计数就+1,当引用次数为0,也就意味着没用了。但总所周知,循环引用的问题,A引用B,B引用A,就让它们逃过一劫。
3.2.可达性分析法
从GCRoot出发,有点类似于树形结构,在引用链上的就是存活对象,剩下到不了的就是垃圾对象。
GCRoot都有哪些?
1)java虚拟机栈中引用的对象
2)方法区中的类静态属性引用的对象
3)方法区中的常量引用的对象
4)本地方法栈中JNI本地方法的引用对象
4. 垃圾对象的清除过程
堆中不同区域,有着不同的算法,常见的有: