# 为什么 Java 中 HashMap 的默认负载因子是 0.75?
7 min read
【核心定义】 HashMap 的默认负载因子 0.75 是空间成本与时间成本之间的一种经验性折中,旨在平衡哈希表的空间利用率和哈希冲突的概率。
【核心定义】 HashMap 的默认负载因子 0.75 是空间成本与时间成本之间的一种经验性折中,旨在平衡哈希表的空间利用率和哈希冲突的概率。
【核心定义】 Java 8 移除永久代并引入元空间,本质上是将类的元数据(如类信息、方法信息、常量池等)从堆内存管理的固定区域,迁移到由本地内存(Native Memory)管理的动态区域,以解决永久代固有的内存溢出问题和调优困难。
HashMap 采用 2 的 n 次方倍扩容,主要是为了优化哈希索引的计算效率,通过位运算替代取模运算,同时保证元素在扩容后能够均匀分布。
B+ 树是一种多路平衡搜索树,是 B 树的一种变体,其核心设计目标是为磁盘等外存设备设计一种高效的、适合范围查询的索引数据结构。
ThreadLocal 对 key(即 ThreadLocal 实例本身)采用弱引用,是为了防止 ThreadLocal 对象无法被垃圾回收而导致内存泄漏,这是 Java 内存管理的一种保护性设计。
【核心定义】 JDK 1.8 对 HashMap 引入红黑树,本质上是将链表法解决哈希冲突时,链表过长导致的查询性能退化问题,从 O(n) 优化为 O(log n),从而在极端哈希冲突下保障了 HashMap 的性能下限。