java当中的四种引用类型

在Java中,有四种类型的引用,它们允许程序员以不同级别的强度来引用对象,从而影响对象的生命周期和垃圾回收的决策。这四种引用类型按照其强度从高到低排序如下:

  1. 强引用(Strong Reference)

    • 强引用是最常见的引用类型,当一个对象被强引用持有时,只要强引用存在,垃圾回收器绝不会回收该对象。即使系统内存不足,也不会回收具有强引用的对象。除非显示地将强引用赋值为null,否则对象永远不会被当作垃圾回收。
    1Object strongRef = new Object();
  2. 软引用(Soft Reference)

    • 软引用是用来描述那些还有用,但并非必需的对象。在内存足够的时候,软引用的对象不会被回收,但当系统内存不足时,垃圾回收器会试图回收那些只被软引用关联的对象。如果回收了软引用指向的对象,下次尝试访问该软引用时,将会返回null
    1SoftReference<Object> softRef = new SoftReference<>(new Object());
  3. 弱引用(Weak Reference)

    • 弱引用的对象拥有更短的生命周期。无论当前内存是否充足,只要垃圾回收器发现了只有弱引用指向的对象,都会将其回收。换句话说,只要垃圾回收器工作,弱引用的对象就会被回收
    1WeakReference<Object> weakRef = new WeakReference<>(new Object());
  4. 虚引用(Phantom Reference)

    • 虚引用也称为幽灵引用,是最弱的一种引用关系。一个对象是否有虚引用的存在,对其生存时间并无影响,也无法通过虚引用来获取对象实例。虚引用的主要目的是跟踪对象被垃圾回收的状态。当一个对象只剩下虚引用时,意味着它即将被回收。虚引用必须和引用队列一起使用,当垃圾回收器准备回收对象时,会将虚引用加入到引用队列中,而不是回收对象本身。
    1ReferenceQueue<Object> queue = new ReferenceQueue<>();
    2PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), queue);

 

在现实生活中,可以用图书馆借阅书籍的例子来形象地解释Java中的四种引用类型:

  1. 强引用(Strong Reference)

    • 假设你去图书馆借书,工作人员为你办理了一张借书卡,卡片上的图书编号就是对图书的强引用。只要这张借书卡有效(未丢失或过期),你就一直有权持有这本书,图书馆不会把它从书架上拿走给别人。在Java中,就如同一个变量对对象的强引用,只要强引用存在,对象就不会被垃圾回收。
  2. 软引用(Soft Reference)

    • 设想图书馆有一项政策,如果馆内空间紧张,对于那些读者持有软借书卡的书籍,当图书馆急需空间时,会通知持有者尽快归还。如果读者未能及时归还,图书馆可以收回这些书籍。对应到Java中,软引用就像这类临时性的借书卡,当系统内存不足时,垃圾回收器会尝试回收软引用的对象。
  3. 弱引用(Weak Reference)

    • 类似于图书馆中的一种特殊情况,读者的借书信息仅记录在易损的便签纸上,而非正式的借书卡上。一旦图书馆例行清查或者意外丢失这条记录,即便书籍尚未归还,也会视为无人借用,可以随时收回。在Java中,弱引用的对象就像是这种没有保障的借书记录,只要垃圾回收器发现一个对象只有弱引用指向,就会立即回收它。
  4. 虚引用(Phantom Reference)

    • 考虑一种奇特的场景,图书馆有一种特殊的借阅凭证,它并不赋予你保留书籍的权利,而是仅仅在书籍即将被处理(比如销毁或捐赠)时,向你发送一条通知。在Java中,虚引用就像这样的凭证,它并不能让你获得对象本身,而是在对象被垃圾回收器回收之前,可以得到一个通知,但它不会阻止对象被回收。例如,你可以知道哪本书将被处理,并在它被回收前做一些必要的记录或清理工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值