月眸


java中的引用Reference

毛毛小妖 2019-07-23 163浏览 1条评论
首页/ 正文
分享到: / / / /

1、总结

 Java从1.2版本开始引入了4种引用,总结就是“强软弱虚”,这4种引用的级别由高到低依次为:

强引用  >  软引用  >  弱引用  >  虚引用

⑴强引用(StrongReference)

强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,也不会回收具有强引用的对象。

⑵软引用(SoftReference)

如果一个对象只具有软引用,则内存空间不足了,才会回收这些对象的内存。软引用可用来实现内存敏感的高速缓存。

⑶弱引用(WeakReference)

弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。只要触发了垃圾回收,不管内存够不够都会被回收。

⑷虚引用(PhantomReference)

    “虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。

      虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。

下面用一个表格来简要做下总结:

级别 什么时候被垃圾回收 用途 生存时间
强引用 从来不会 对象的一般状态 JVM停止运行时终止
软引用 在内存不足时 缓存 内存不足时终止
弱引用 在垃圾回收时 对象缓存 gc运行后终止
虚引用 Unknown Unknown Unknown

2、举个例子

强引用:

Person p= new Person();

软应用:

SoftReference ref = new SoftReference(new Person());

弱引用:

WeakReference ref = new WeakReference(new Person());

虚引用:

ReferenceQueue queue = new ReferenceQueue();
PhantomReference ref = new PhantomReference(new Person(), queue);

 

最后修改:2019-07-23 20:13:38 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

评论列表

还没有人评论哦~赶快抢占沙发吧~