zoukankan      html  css  js  c++  java
  • java 引用类型及作用

    0. 引言

      Java 中一共有 4 种类型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference ,
    这 4 种类型的引用与 GC 有着密切的关系.

    1. 强引用 (StrongReference)

      普通的引用做法,如:
    String str = "hello";
    只要引用存在就不会被回收,除非手动置为null,或者超出范围,gc才会回收

    2. 软引用 (SoftReference)

      当JVM虚拟机内存不足时,会回收软引用对象.这样做的好处是,保证java抛出OutOfMemory异常前,把弱引用对象置为null,
    用于一些资源的缓存,实现Cache功能.如:
    A obj = new A();
    SoftReference sr = new SoftReference(obj);

    //引用时
    if(sr!=null){
      obj = sr.get();
    }else{
      obj = new A();
      sr = new SoftReference(obj);
    }
      垃圾收集器在运行时可能会(也可能不会)释放软可及对象.对象是否被释放取决
    于垃圾收集器的算法以及垃圾收集器运行时可用的内存数量.

    3. 弱引用 (WeakReference)

      和软引用 大同小异, SoftReference和WeakReference的区别是:一旦gc发现对象是WeakReference可达就会把它放到ReferenceQueue中,然后等下次gc时回收它;当对象是SoftReference可达时,gc可能会向操作系统申请更多内存,而不是直接回收它,当实在没辙了才回收它。像cache系统,最适合用SoftReference。让gc来替我们决定什么时候回收对象以及回收哪些对象。

    4. 虚引用 (PhantomRefrence)

      用得较少,建立虚引用之后通过get方法返回结果始终为null,对ReferenceQueue软引用和弱引用可以有可无,但是虚引用必须有
    虚引用的唯一用处是跟踪 referent 何时被 enqueue 到 ReferenceQueue 中

    5. 比较

      四种引用的强弱关系按上面顺序排下来:强 > 软 > 弱 > 虚.对于对象是属于哪种可及的对象,由他的最强的引用决定


    6. 小结

      一般的应用程序不会涉及到 Reference 编程, 但是了解这些知识会对理解 GC 的工作原理以及性能调优有一定帮助, 在实现一些基础性设施比如缓存时也可能会用到

  • 相关阅读:
    【OI新闻】2016.10.06
    旧博客欢迎莅临
    【NYOJ42】一笔画问题
    LCIS最长公共上升子序列
    LIS最长上升子序列
    LCS最长公共子序列
    T2848 列车调度(二分或dp)
    二分图的最大匹配、完美匹配和匈牙利算法
    高精大水题
    最大0,1子矩阵
  • 原文地址:https://www.cnblogs.com/aiguozhe/p/3819760.html
Copyright © 2011-2022 走看看