美文网首页
强软弱虚引用如何理解

强软弱虚引用如何理解

作者: 糯米团子123 | 来源:发表于2022-07-25 18:05 被阅读0次
    1. 强引用:
      我们平时最常使用的基本对象引用,JVM不会回收强引用类型对象,即使内存不足导致OOM也不会回收。

    实现一个强引用

    User user = new User()
    
    1. 软引用:
      内存空间足够的情况下,JVM不会回收软引用对象,如果内存空间不足,那么软引用对象会被回收。
      只要JVM没有回收,软引用就可以继续被程序使用,因此可以用软引用存放一些内存敏感的缓存。只要内存足够,对象就保持永远不被回收。

    实现软引用:java.lang.ref.SoftReference

    SoftRenference softRenfernce = new SoftRenference(new User());
    // 获取软引用对象
    System.out.println(softReference.get())
    
    1. 弱引用:垃圾回收线程只要扫描到弱引用对象,不管内存空间是否足够,都会进行回收。
      弱引用可以用来实现一些规范化映射,如:WeakHashMap,当key或者value不再被引用时可以自动回收。

    实现一个弱引用:java.lang.ref.WeakReference

    WeakReference  weakReference = new WeakReference(new User());
    System.out.println(weakReference.get())
    
    1. 虚引用:虚引用不决定对象的生命周期,如果一个对象仅持有虚引用,那么他就和没有任何引用一样,任何时候都可以被JVM回收。
      虚引用主要用来跟踪对象被垃圾回收器回收的话,虚引用必须和引用队列(ReferenceQuque)联合使用,当垃圾回收器准备回收一个对象时,如果发现他还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之前关联的引用队列。

    实现一个虚引用:java.lang.ref.ReferenceQueue

    // 引用队列
    ReferenceQueue<User> queue = new ReferenceQueue<> ();
    // 构建虚引用对象
    PhantomReference phantomReference = new PhantomReference(new User());
    // 获取虚引用对象
    System.out.println(phantomReference .get())
    

    ReferenceQueue(引用队列)是必须的,当对象回收时会放入其中,它最大的作用是跟中对象的回收。

    相关文章

      网友评论

          本文标题:强软弱虚引用如何理解

          本文链接:https://www.haomeiwen.com/subject/xragirtx.html