1.引用计数器
为每个对象创建一个引用计数器,有对象引用时,计数器+1,引用被释放时,计数器-1。当计数器为0时,代表可以被回收(Java好像用不到)
2.可达性分析(GC Roots 根节点算法)
从GC Root 节点进行搜索 ,如果节点和对象之间没有连接(引用链),则称为不可达。GC回收至少需要进行两次节点搜索,两次都不可达,才可以进行回收。
可作为GC Roots的对象包含以下几种:
(1)虚拟机栈(栈帧中的本地变量表)中引用的对象。
(2)方法区中静态属性引用的对象
(3)方法区中常量引用的对象
(4)本地方法栈中(Native方法)引用的对象