五种引用

 

   
强引用被GC Root直接引用的对象只有所有GCRoot断开引用后,才能被回收
软引用 被GCRoot间接引用的对象在不被任何一个GC Root直接引用后,当一次垃圾回收后,内存仍然不足时,回收软引用对象
弱引用被GCRoot间接引用的对象在不被任何一个GC Root直接引用后,当发生垃圾回收,不管空间够不够 都会回收弱引用对象
虚引用被GCRoot间接引用的对象必须配合引用队列使用

终结器引用

被GCRoot间接引用的对象必须配合引用队列使用
  • 虚引用 必须配合引用队列使用 ,当虚引用创建时就关联一个引用队列,例如直接内存  在创建ByteBuffer的实现类对象时,会创建名为Cleaner的虚引用对象,ByteBuffer会分配一块直接内存,并把直接内存的地址传递给虚引用对象,目的是,将来ByteBuffer没有强引用被回收掉,直接内存并不能被java所管理,所以让ByteBuffer回收掉后,让虚引用cleaner进入引用队列。引用队列定时去找新入队的cleaner,如果有就调用cleanner的方法,释放直接内存。
    • 终结器引用,所有的java对象都会集成Object父类,儿object父类里都有finallize()方法,当这个对象重写了finallize方法,并且没有强引用后,进行垃圾回收时,由虚拟机创建一个终结器引用,当这个对象被垃圾回收时,会把终结器引用加入到引用队列,值得注意的是,这个时候这个对象并没有立刻被垃圾回收,而是先把他的终结器引用放入引用队列,再由一个优先级很低的线程 (finallize Hanlder),在某些时期 查看是否有终结器引用,如果有,则通过终结器引用找到对象,通过调用finallize方法回收掉。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值