JVM 第三节——垃圾回收 GC

判断对象可以回收:

引用计数法:

只要一个对象被其他引用,计数就会增加,如果没有引用了,计数就为0,可以被回收。

但存在循环引用时,就无法进行垃圾回收。

可达性分析算法:

根对象——肯定不能被当作垃圾的对象

扫描堆中的对象,虚拟机的垃圾回收器沿着GC root对象为起点的引用链来找到该对象,找不到,表示可以回收。

哪些对象可以作为GC root?

system class系统类,native stack底层本地方法,busy monitor锁的监控,thread线程。

四种引用:

强引用:沿着GC Root能够到达的对象 就不会被回收。

软引用:垃圾回收时,内存不够的时候 就会把软引用的对象回收

弱引用:垃圾回收时,弱引用的对象直接回收(不管内存够不够)

 引用队列:软(弱)引用的对象被回收后,它们自身就会进入引用队列,来释放它们的内存。

虚引用:创建bytebuffer的时候,会创建一个虚引用的对象cleaner,未来bytebuffer被回收后,虚引用对象进入引用队列,一个referencehandler线程会到引用队列中找新入队的cleaner,来调用clean方法。clean方法根据它的地址来调用unsafe.freeMemory方法释放直接内存。

终结器引用:对象的finalize()方法 来自Object父类,没有强引用后,虚拟机对该对象创建终结器引用,放入引用队列,优先级很低的线程finalize根据终结器引用的地址,找到该对象调用finalize,下次GC就会清理掉它。

垃圾回收算法:

1. 标记清除算法:先标记,后清除,清除速度快。容易产生碎片(内存不连续)

2. 标记整理算法:没有内存碎片。把可用的部分向前移动,整

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值