美文网首页
java引用类型

java引用类型

作者: 填坑之路_DK | 来源:发表于2021-04-04 22:39 被阅读0次

强引用

  • 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引用类型

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