• 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 的工作原理以及性能调优有一定帮助, 在实现一些基础性设施比如缓存时也可能会用到

  • 相关阅读:
    (OK) VirtualBox 5.0.10 中 Fedora 23 在安装了增强工具后无法自动调节虚拟机分辨率的问题
    (OK) install-fedora23—gnome classic—dnf—gdm—multi-user—graphical
    (OK) fedora23——add “opening terminal” in the menu of right click
    (OK) Install Docker on Fedora 23
    (OK) 运行cBPM in Fedora23
    错误:‘bOS::SQL::SQLCommand::SQLOperation’既不是类也不是命名空间
    My enum is not a class or namespace
    【t049】&&【u001】足球
    【u002】数列排序(seqsort)
    【u003】计算概率
  • 原文地址:https://www.cnblogs.com/aiguozhe/p/3819760.html
Copyright © 2020-2023  润新知