面试-JVM-四种引用的区别

何为引用(Reference

java.lang.ref.Reference

Abstract base class for reference objects. This class defines the operations common to all reference objects. Because reference objects are implemented in close cooperation with the garbage collector, this class may not be subclassed directly.

引用对象的抽象基类。这个类定义了所有引用对象通用的操作。因为引用对象是在与垃圾收集器密切合作的情况下实现的,所以这个类可能不会直接子类化。

JDK 1.2 之前对引用(reference)的定义:

如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称该reference数据是代表某块内存、某个对象的引用。

由于这种对reference的定义只有“被引用”和“未被引用”。当内存空间充裕时,能保留在内存中,如果内存空间进行垃圾收集后,仍然比较紧张,这个时候,哪些“被引用”的对象能够被收集,成为了这种定义的痛点。

JDK 1.2 之后,Java对引用(reference)的定义:

引用分为强引用(Strongly Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)四种。

四种引用类型介绍
  • 强引用(Strongly Reference

    强引用是最传统的“引用”定义,是指在程序代码之中普遍存在的引用赋值,即Object obj = new Object()这种引用关系。无论任何情况下,只要强引用关系还存在,垃圾收集器就永远不会回收掉被强引用的对象。因此,强引用是造成Java内存泄漏的主要原因之一

  • 软引用(Soft Reference

    软引用需要用SoftReference类来实现,它是用来描述一些还有用,但非必须的对象。只被软引用关联着的对象,在系统将要发生内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存,才会抛出内存溢出异常。软引用通常用在对内存敏感的程序中

  • 弱引用(Weak Reference

    弱引用需要用WeakReference类来实现,它是用来描述那些非必须的对象,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集为止。当垃圾收集器开始工作时,无论当前内存是否足够,都会回收掉被只被弱引用的对象。

  • 虚引用(Phantom Reference

    虚引用需要用PhantomReference类来实现,它也被称为“幽灵引用”或“幻影引用”,它是最弱的引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来获取一个对象实例。为一个对象设置虚引用的唯一目的只是为了能在这个对象被收集器回收时收到一个系统通知

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值