GC原理

GC原理

三个步骤:
1. 需要回收的对象?

回收那些不可能再被任何途径使用的对象

1.1.怎样确定哪些对象是不再被引用的对象?(两次标记)

首先:通过可达性分析算法对GC-ROOT对象向下搜索,搜索到的对象到GC-ROOT的路径被称为引用链,如果一个对象没有到达GC-ROOT的引用链,则此对象被标记。
然后: 对已标记的对象进行筛选,筛选的条件是对象是否有必要执行finalized()方法。当对象没有覆盖finalized()方法,或者虚拟机已经调用过此方法,都被视为“没有必要执行”。
最后:若对象被判定为有必要执行finalized()方法,这些对象将被放置在F-Queue队列中,进行第二次标记。此时虚拟机自动创建的Finalizer线程来会出发finalized()方法,若对象在finalized()方法中逃逸,此对象将在第二次标记时被移除“即将回收”的集合,如果还没有逃脱,对象就被回收。

2.什么时候回收?

  • 强引用:普遍存在的对象,类似new对象创建,只要强引用存在,垃圾回收器永远不会回收被引用的对象。
  • 软引用:还有用但是非必须,在系统发生内存溢出之前之前,会将这部分对象列入回收范围中进行二次回收,若这轮垃圾回收之后内存还是不够用,则抛出内存溢出异常。(JDK1.2)
  • 弱引用:非必须对象,被此关联的对象的生命周期只到下次垃圾回收之前,当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象(JDK1.2,WeakReference类)
  • 虚引用:不影响对象的生命周期,并且此引用将不会创建对象。只是在垃圾回收后有系统通知。

3.如何回收?

标记-清除算法

复制算法

标记整理算法

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值