常见的垃圾回收算法

什么是垃圾:
没有任何引用指向的一个对象或者多个对象(循环引用)

如何定位垃圾:

  1. 引用计数(ReferenceCount)(循环引用问题不好解决)
  2. 根可达算法(RootSearching)(本地方法、常量池、本地方法栈、已加载的静态属性)

常见的垃圾回收算法:

1.标记清除(mark sweep):
两遍扫描,第一遍将不可回收的对象标记,第二遍将可回收的对象清除
优点:在存活对象比较多的情况下,效率较高
缺点:位置不连续、产生碎片、效率偏低(两遍扫描)

2.拷贝算法 (copying):
内存一分为二,一遍扫描,找到不可回收的对象,拷贝到另一块内存中
优点:在存活对象比较少的情况下,效率高,没有碎片(适合年轻代:伊甸园区(8)、From Survivor区(1)、To Survivor区(1))
缺点:浪费空间(内存只能使用一半,移动对象、指针需要调整)

3.标记压缩(mark compact):
两遍扫描,第一遍将不可回收的对象标记,第二遍将不可回收的对象拷贝到前面可回收的对象位置上
优点:没有碎片,内存使用也不需要减半(适合老年代)
缺点:效率偏低(两遍扫描,移动对象、指针需要调整)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值