美文网首页
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