首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

ThreadLocalMap里Entry为何声明为WeakReference

* 此哈希表中的项继承了WeakReference * 它的主要引用域是key(这总是一个 ThreadLocal对象)。...的作用,百度一下: WeakReference是Java语言规范中为了区别直接的对象引用(程序中通过构造函数声明出来的对象引用)而定义的另外一种引用关系。...WeakReference标志性的特点是:reference实例不会影响到被应用对象的GC回收行为(即只要对象被除WeakReference对象之外所有的对象解除引用后,该对象便可以被GC回收),只不过在被对象回收之后...,reference实例想获得被应用的对象时程序会返回null 我的理解就是,WeakReference对应用的对象users是弱引用,不会影响到users的GC行为。...而Entry声明为WeakReference,users置为null后,线程的threadLocalMap就不算强引用了,users就可以被GC回收了。

1.6K80

PhantomReference 和 WeakReference 究竟有何不同

,在只有一个 WeakReference 引用它的情况下,那么这个对象就会被 GC,与其对应的 WeakReference 也会被加入到其注册的 ReferenceQueue 中。...事实上,在大部分情况下 WeakReference 也是可以的,但是在一种特殊的情况下 WeakReference 就不可以了,只能由 PhantomReference 来跟踪对象的回收状态。...根据 WeakReference 的语义,此时发生了 GC,并且 object1 没有任何强引用链和软引用链,那么此时 JVM 是不是就会将 WeakReference 加入到 _reference_pending_list...也就是说在这种情况下,FinalReference 和 WeakReference 在本轮 GC 中,都会被 JVM 处理,但是 object1 却是存活状态,所以 WeakReference 不能跟踪对象的垃圾回收状态...那 JVM 是如何实现 PhantomReference 和 WeakReference 的这两种语义的呢 ?

10010

防止内存泄露之让 Map 的 Key 没有其他强引用时可以被回收

3.2 使用 WeakReference WeakReference 是一种弱引用,它可以用来描述非必须存在的对象,当它指向的对象没有被其他强引用引用时,垃圾回收器会回收它。...因此,可以采用 WeakReference 包装 Key ,这样 Source 没有其他强引用时就可以被回收。...当然WeakReference 也存在一些缺点: WeakReference 不能保证对象的存活时间,当对象只被 WeakReference 引用时,它随时可能被垃圾回收器回收,这可能导致一些意外的情况或者数据丢失...WeakReference 需要额外的内存空间和时间来维护引用队列和弱引用对象,这可能影响程序的性能和效率。...WeakReference 不能单独使用,它需要配合其他强引用或者软引用来实现缓存或者监听等功能。

73730
领券