GC垃圾回收

本文详细介绍了Java中的垃圾回收机制,包括堆中的对象回收方法如计数法与根GCroot搜索法,不同类型的引用(强引用、软引用、弱引用、虚引用),以及常见的垃圾收集算法,如标记-清除算法、复制算法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

堆中的对象回收:  
计数法:在每个对象上有一个计数器,每增加一个引用,计数器就加1,每减少一个引用计数器就减少1,当计数器为0时,这个对象可以被回收,但是存在两个对象互相引用的情况,而该对象又不能被回收掉,


  所以又有了根GCroot搜索法,沿着每个对象的引用一直向上寻找,如果找到GCroot就不被删除,如果没有找到,该对象就加入了被回收的行列,可以做GCroot的有(1.当前正在执行的方法里的局部变量和输入参数2.活动线程3.内存中所有类的静态字段4.JNI引用[本地方法栈中引用的对象]),但是这种回收方法显得并不智能,对于一些无关紧要的对象,内存大的话,不用回收也无所谓,内存小的话,这些无关紧要的对象肯定想要回收它,为了更加灵活的回收这些对象,


  所以把引用分为4种:1.强引用2.软引用3.弱引用4.虚引用
  根据不同的引用来对可以回收的对象加以回收。


当程序员创建一个对象时,GC就开始监控这个对象的地址,大小,以及使用的情况。通过判断哪些对象是不可达的,GC就有责任回收这些内存空间,程序员可以手动执行system.gc(),通知GC运行,但是java语言规范并不保证GC一定会执行。


为什么会垃圾回收?因为java程序员在编写程序的时候不再考虑内存管理,垃圾回收可以有效的防治内存泄漏。
垃圾收集算法:
1.标记-清除算法
2.复制算法
3.标记-整理算法
4.分代收集算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值