java引用类型

强引用

  • M m = new M();
  • 没有任何引用指向该对象时, 该对象就能被回收,最常用的引用

软引用

  • SoftReference<byte[]> m = new SoftReference<>(new byte[1024]); SoftReference 软引用 byte 数组
  • 内存不足及回收,常用于缓存

弱引用

  • WeakReference<M> m = new java.lang.ref.WeakReference<>(new M());
  • 垃圾回收器看到即回收, 用于ThreadLocal等

虚引用

  • java.lang.ref.PhantomReference<M> m = new java.lang.ref.PhantomReference<>(new M(),QUEUE);
  • 关联堆外内存,随时能被回收,无法被get,被回收时自动存入队列,用于 管理堆外内存(NIO等)

ThreadLocal 为什么使用弱引用

  • 防止内存泄露
  • ThreadLocal 以自身为 key,T为value 存储在 ThreadLocalMap中 (弱引用)
  • ThreadLocalMap 存储在 Thread中, Thread 存在于线程池中,因此,强引用下 ThreadLocal 永远可达,永远不会被回收
  • 在线程中,有对象使用 ThreadLocal 时(强引用) ,也不会被回收,因此,不会被误回收
  • ThreadLocal 虽然是弱引用,但是ThreadLocal仅作为KEY,因此,如果没有显示调用remove,v 的删除会在set时,resize 方法中被清除
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JAVA的引用类型 强引用(Strong Reference)强引用是指在程序代码中普遍存在的,类似“Object...
    tylorsenna阅读 378评论 0 0
  • Java有四种引用类型,strongreference,softreference,weakreference,p...
    alexpdh阅读 305评论 0 0
  • 导读 移动开发知识体系总章(Java基础、Android、Flutter) 基本数据类型 引用类型 强引用(Fin...
    彭空空阅读 4,056评论 0 3
  • 概述 java.lang.ref 类库包含一组类,为垃圾回收提供了更大的灵活性。 java.lang.ref 有三...
    bing__chen阅读 437评论 0 2
  • Java引用概述 StrongReference(强引用) 不存在这个类 默认实现 Java.lang.ref提供...
    Gxgeek阅读 526评论 0 2