# 为什么 Java 中的 ThreadLocal 对 key 的引用为弱引用?
6 min read
ThreadLocal 对 key(即 ThreadLocal 实例本身)采用弱引用,是为了防止 ThreadLocal 对象无法被垃圾回收而导致内存泄漏,这是 Java 内存管理的一种保护性设计。
ThreadLocal 对 key(即 ThreadLocal 实例本身)采用弱引用,是为了防止 ThreadLocal 对象无法被垃圾回收而导致内存泄漏,这是 Java 内存管理的一种保护性设计。
【核心定义】 JDK 1.8 对 HashMap 引入红黑树,本质上是将链表法解决哈希冲突时,链表过长导致的查询性能退化问题,从 O(n) 优化为 O(log n),从而在极端哈希冲突下保障了 HashMap 的性能下限。
【核心定义】Redis 的核心网络模型和键值操作采用单线程设计,主要是为了避免多线程的并发竞争问题,简化实现并充分发挥内存操作的性能优势;6.0 版本引入多线程主要是为了提升网络 I/O 的吞吐量,应对高并发场景下的性能瓶颈。
RocketMQ 选择自研轻量级的 NameServer 作为注册中心,而非使用 ZooKeeper,主要是基于高性能、低依赖、简单可靠的设计哲学,以更好地适配消息队列场景的高吞吐、低延迟核心需求。
【核心定义】 TIME_WAIT 状态是 TCP 连接主动关闭方在发送完最后一个 ACK 后进入的状态,其本质是一个延迟关闭的定时器状态,用于确保最后一个 ACK 能够可靠地被对端接收,并让网络中所有属于此连接的旧报文段都自然消亡,从而防止新旧连接的数据发生混淆。
Spring 通过三级缓存机制解决 Bean 创建过程中的循环依赖问题,其本质是在 Bean 生命周期中引入对象工厂作为中间层,允许提前暴露未完全初始化的 Bean 引用,同时确保代理对象的正确创建。