引用计数:为每个对象维护一个引用计数器:
缺点:引用计数有时间开销
交叉引用(循环引用)
常量等引用的对象那个作为root点:
可达性分析(标记都会产生可达性分析算法):从root到遍历所有对象,如果从root不能到达,
缺点:遍历需要时间,标记的
- 引用计数法:循环引用
- 标记-清除算法:
-标记(记录每个对象的引用数)->程序暂停->清除:会产生碎片 - 标记-整理算法:标记后->程序暂停->将可用的对象移动到一块连续的区域
- 复制算法:
刚开始的时候只有两个完整的内存,右边不用
from空间先被使用
to 空间不被使用,使用可达性分析标记from生存的对象,复制到to去,然后清空from,再讲from空间变成->to,to变成from。
但是当from生存的对象太多的时候,移动的代价就比较大。
串行垃圾收集器:
会暂停线程:
将操作栈的2移动到本地变量表下标为1的位置
iload_2
iload_1
isub
istore_3