jvm垃圾回收机制

​ 无需手动编码,但其内部配合引用队列使用,在垃圾回收时,终结器引用入队(被引用对象暂时没有被回收),再由 Finalizer 线程通过终结器引用找到被引用对象并调用它的 fifinalize方法,第二次 GC 时才能回收被引用对象。当内存不足时系统会逐步进行垃圾回收,第一次GC回收无用的新生代对象,第二次GC回收无用的老年代对象,第三次回收与第一次回收类似,第四次回收软引用的新年代和老年代对象,此时内存足够进行下一次操作,垃圾回收结束。可以看出垃圾回收时将先前声明为软引用的四个对象全部回收了。
摘要由CSDN通过智能技术生成

垃圾回收

以前的垃圾回收机制

1.引用计数法

每个创建出来的对象通过某种方法记录他被引用的数量,当引用的数量变为0时,说明该对象已经没有人去使用,回收该对象

缺点:

当两个对象互相引用时,那么无论这两个对象被不被使用都不会触发垃圾回收机制

image-20220909142939793
2.可达性分析算法

如果一个对象直接或者间接的被根对象(GC Root)引用那么这个对象不用被回收

根对象

一定不会被当成垃圾回收的对象

实现步骤

1.Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象

2.扫描堆中的对象,看是否能够沿着 GC Root对象 为起点的引用链找到该对象,找不到,表示可以回收

哪些对象可以作为 GC Root ?
1.系统类
image-20220909144309960
2.操作系统引用的java对象
image-20220909144416314
3.被加锁的对象

image-20220909144505182

4.正在活动的线程中局部变量引用的对象
image-20220909144538065

4种引用

1.强引用

​ 只有所有 GC Roots 对象都不通过(强引用)引用该对象,该对象才能被垃圾回收

image-20220909145158777
2.软引用(SoftReference)

​ 仅有软引用引用该对象时,在垃圾回收后,内存仍不足时会再次出发垃圾回收,回收软引用对象可以配合引用队列来释放软引用自身**(两次垃圾回收)**

image-20220909145300059
3.弱引用(WeakReference)

​ 仅有弱引用引用该对象时,在垃圾回收时,无论内存是否充足,都会回收弱引用对象可以配合引用队列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值