MENU

Java中的强引用、软引用、弱引用、虚引用

详细点

  • 强引用(Strong Reference)
    • 最普遍的引用:Object obj = new Object()
    • 抛出OutOfMemoryError终止程序也不会回收具有强引用的对象
    • 通过将对象设置为null来弱化引用,使其被回收
  • 软引用(Soft Reference)

    • 对象处在有用但非必须的状态

    • 只有当内存空间不足时,GC会回收该引用的对象的内存

    • 可以用来实现高速缓存

    • 可以和引用队列ReferenceQueue联合使用

      String str = new String("abc");   //强引用
      SoftReference<String> softRef = new SoftReference<String>(str);
      
  • 弱引用(Weak Reference)

    • 非必须的对象,比软引用更弱一些

    • GC时会被回收

    • 被回收的概率也不大,因为GC线程优先级比较低

    • 适用于引用偶尔被使用且不影响垃圾收集的对象

    • 可以和引用队列ReferenceQueue联合使用

      String str = new String("abc");
      WeakReference<String> abcWeakRef = new WeakReference<String>(str);
      
  • 虚引用(PhantomReference)

    • 不会决定对象的生命周期

    • 任何时候都可能被垃圾收集器回收

    • 跟踪对象被垃圾收集器回收活动,起到哨兵作用

    • 必须和引用队列ReferenceQueue联合使用

      String str = new String("abc");
      ReferenceQueue queue = new ReferenceQueue();
      PhantomReferenece ref = new PhantomReference(str,queue);
      

特点

20194

标签: Java
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码
添加新评论