Java 1.2加入的四种引用:强引用,软引用,弱引用,虚引用

强引用

传统理解上的引用,Obeject obj = new ArrayList();类似的引用,只要存在强引用关系,这个对象就不可能被gc

注意:不会被gc是说持有引用的对象 与 被引用的对象直接的可达性是绝对的,不会被虚拟机干涉;如果持有引用的对象与GC root不可达的话,依然有可能会被GC

软引用

被软引用关联的对象,会在系统将要发生内存溢出异常之前会被纳入可被回收的对象之列,回收之后内存还不足,就会抛出内存溢出异常,不到万不得已,jvm不会动他

主要使用场景:内存敏感的缓存场景,一些对象池中

弱引用

若用的对象只能生存到下一次垃圾收集之前,弱引用不会干扰gc的判断,只要弱引用的对象愿意死亡被收集,这条弱引用就不会对gc有任何影响

使用场景很多,比如非静态内部类可以维持外部类的弱引用,访问外部类的数据,而不会影响外部类的生存时间,对于防止内存泄漏很有效

虚引用

严格来说不能称之为引用,这个引用不能访问对象的数据,也不能找到他,唯一的作用就是:当弱引用对象死亡时,持有引用方可以获得系统通知。用来跟踪对象是否被垃圾回收的活动。

解释通知:虚引用必须和引用队列(ReferenceQueue)联合使用,程序可以判断引用队列是否加入了虚引用,来了解对象是否被回收,然后可以采取一些必要的措施,比如进行内存回收动作,比如监视缓存,当缓存被回收时新建缓存

意义

在最佳实践的使用中,每个种引用都有他的存在意义,四种引用是jvmGC机制在Java语言层面的一种体现,四种引用是为了让程序员可以以代码的方式控制 对象在gc时的部分行为

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值