强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么? -欧洲杯足彩官网

`
hbxflihua
  • 浏览: 653113 次
  • 性别:
  • 来自: 杭州
最近访客
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 社区版块
    • ( 0)
    • ( 0)
    • ( 1)
    存档分类
    最新评论

    强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?

      博客分类:
    • java

     

      java 语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象。理解引用对于掌握 java 对象生命周期和 jvm 内部相关机制非常有帮助。不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。

     

    引用出现的根源是由于gc内存回收的基本原理-gc回收内本质上是回收对象,而目前比较流行的回收算法是可达性分析算法,从gc roots开始按照一定的逻辑判断一个对象是否可达,不可达的话就说明该对象已死(除此之外另外一种常见的算法就是引用计数法,但是这种算法不能解决相互引用的问题)。基于此java向用户提供了四种可用的引用:强引用、软引用、弱引用和幻象引用,同时还提供了一种不可被使用的引用-finalreference,这个引用是和析构函数密切相关的。

     

    强引用是开发者通过new的方式创建的,其他几种引用java提供了相应的类:softreferenceweakreferenceplantomreference。如果你去查看源码,你会发现这个类实现的核心是referencereferencequeue(引用队列)两个类,而且这两个类也特别的简单。

    java世界泰山北斗级大作《thinking in java》切入java就提出“everything is object”。在java这个充满object的世界中,reference是一切谜题的根源,所有的故事都是从这里开始的。

     

    reference类似一个链表结构,通过创建一个守护线程来执行对应引用的清除、cleaner.clean、以及引用的入队操作。

    referencequeue是指定了引用队列的一些具体操作,简单来说它是一个链表结构,并提供了一些基本的链表操作。而除了强引用外其他的都是继承于此,通过这样的类约束了引用的相关内容,便于和gc进行交互。

     

    这几类引用的区别如下:

    1、强引用是通过new创建的对象引用。只有当gc明确判断该引用无效时才会回收相应的引用对象,即使抛出oom

     

    2、软引用是当gc检测到继续创建对象会导致oom时会进行一次垃圾回收,这次回收会将软引用回收以防抛出异常,根据这样的特点该引用常用来被当做缓存使用。图片缓存框架中,“内存缓存”中的图片是以这种引用来保存,使得jvm在发生oom之前,可以回收这部分缓存。在静态内部类中,经常会使用虚引用。例如,一个类发送网络请求,承担callback的静态内部类,则常以虚引用的方式来保存外部类(宿主类)的引用,当外部类需要被jvm回收时,不会因为网络请求没有及时回来,导致外部类不能被回收,引起内存泄漏。

     

    3、虚引用是那些如果引用未被使用,就会在最近的一次gc时被回收。例如javathreadlocal与动态代理都是基于这样的一个引用实现的,一般针对那些比较敏感的数据。

     

    4、幻象引用是针对那些已经执行完析构函数之后,仍然需要再执行一些其他操作的对象,比如资源对象的关闭就可以用到该引用。

     

    除了幻象引用(因为 get 永远返回 null),如果对象还没有被销毁,都可以通过 get 方法获取原有对象。这意味着,利用软引用和弱引用,我们可以将访问到的对象,重新指向强引用,也就是人为的改变了对象的可达性状态!所以,对于软引用、弱引用之类,垃圾收集器可能会存在二次确认的问题,以保证处于弱引用状态的对象,没有改变为强引用。

     

    如果我们错误的保持了强引用(比如,赋值给了 static 变量),那么对象可能就没有机会变回类似弱引用的可达性状态了,就会产生内存泄漏。所以,检查弱引用指向对象是否被垃圾收集,也是诊断是否有特定内存泄漏的一个思路,如果我们的框架使用到弱引用又怀疑有内存泄漏,就可以从这个角度检查。

    分享到:
    |
    评论

    相关推荐

      美国制造业的重生:幻象还是现实?美国十大制造行业深度调研.doc

      iec 61938,更多资料,见微信公众号:硬件工程师炼成之路

      iec 61938标准,更多资料,见微信公众号:硬件工程师炼成之路

      基于残差结构和幻象模块的垃圾图片分类算法.pdf

      网络上目前流行的视觉幻象,不同角度看起来龙的头部一直盯着你,很有趣

      我们使用的是普朗克2015年的cmb数据; sdss boss dr12,mgs和6dfs的bao测量; 万神殿样品的sne ia光度距离测量; 来自bicep2 / keck合作(bk14)的cmb b模式极化数据; 普朗克镜头数据; 哈勃常数($ 73.24 \ pm ...

      30元买的 不信去下30元买的 不信去下30元买的 不信去下30元买的 不信去下30元买的 不信去下30元买的 不信去下30元买的 不信去下30元买的 不信去下30元买的 不信去下30元买的 不信去下

      简单的幻象卡桑德拉的例子这是有关如何使用cassandra客户端库幻象的简单但完整的示例。 它包含我在幻影和cassandra的可用教程中发现的小片段,例如创建架构,启用幻象日志记录并最终正确断开连接。 在此示例中,将...

      kinect(幻象)sdk编程指南.pdf

      浪漫精神的兴衰:家庭阶级与文化幻象

      每次打开新标签时都会获得apex幻象不同的高清壁纸。这个新主题除此以外还包括天气,时间,记事本,时钟等其他你想要的强大功能。 《apex英雄》中幻象是一位能利用替身来引诱敌人的英雄,游戏中的弹夹量很少,一次...

      在书的后面部分有一个简单的陷阱和缺陷目录,它提供了对前面部分的引用的一个简明分类法。 你要解决掉这些谜题,并且永远都不要成为那些有违直觉或隐晦的行为的猎物,这些行为甚至可以愚弄大多数有经验的程序员。

      行业-电子政务-幻象电源供电麦克风的远程控制.zip

      行业-电子政务-幻象电源供电传声器的电源.zip

      基于相似性约束的面部幻象在人脸识别中的应用.pdf

      作为新兴智能交互媒介,chatgpt在机器人和人之间创造了一个准人际交往的互动幻象。人们在智能互动中实现符号意义共享、打破“镜中我”顾虑、突破自我披露的边界,获得无时无刻的陪伴感,与人言说的身份认同和默契共鸣的...

      在书的后面部分有一个简单的陷阱和缺陷目录,它提供了对前面部分的引用的一个简明分类法。 你要解决掉这些谜题,并且永远都不要成为那些有违直觉或隐晦的行为的猎物,这些行为甚至可以愚弄大多数有经验的程序员。

      第2场 基于nerf的三维场景重建和理解 第3场 mpi and neural rendering 第4场 光影幻象:神经辐射场中的时空流转 第5场 神经隐式slam方法_朱紫涵 第6场 hdr-nerf-presentation 第7场 在非理想输入下nerf的重建

      人工智能挑战、“法律自动售货机”幻象与法律职业的未来.pdf

      数据并发的问题 (脏读、不可重复读、幻象读)和数据库锁机制

    global site tag (gtag.js) - google analytics
    网站地图