知其然,知其所以然
Java 内部原理 2026-05-08

String 内部:coder 决定 1 字节还是 2 字节,「不可变」只是约定——反射改一个字节,字面量、HashMap 全被改了

关于 String 有两个流传很广的说法:JDK 9 之后引入了 Compact Strings,纯拉丁字符的字符串用 1 个字节存一个字符,含其他字符才用 2 个字节;String 是不可变的。这次用本机的 OpenJDK 17 逐个验证:用反射读出 String 内部的 value(byte)

Java String JVM 动画演示
Java 内部原理 2026-05-07

HashMap 扩容全过程:第 13 个 put 才触发,节点按 hash 的一位拆成两桶,预设容量省掉 18 次扩容

HashMap 的扩容有几个流传很广的说法:默认容量 16、负载因子 0.75、放到第 13 个元素扩容、扩容后节点"重新计算位置"。这次不背,全部在本机的 OpenJDK 17 里用反射读 HashMap 内部的 table 和 threshold 字段,逐个 put 地看:table 什么时候

Java HashMap JVM 动画演示
京ICP备2026067502号-1京公网安备11010502063487号