Posts
All the articles I've posted.
-
hashCode与equals的契约——为什么重写equals必须重写hashCode?
equals 相等的对象 hashCode 必须相等,违反这条契约 HashMap 的 get 就找不到 key,详解散列桶定位的底层逻辑。
-
String、StringBuilder、StringBuffer 深入对比:从字节码到 JMH 性能
从 JDK 9 Compact Strings 的 byte[]+coder 机制到扩容策略与 javac+号编译优化,再到 JMH 性能数据对比,给出三者的完整选型决策树。
-
Java异常表的零开销机制
try-catch 编译为 class 文件末尾异常表而非内联代码,正常路径字节码零痕迹真零开销,finally 靠编译器在所有出口复制代码实现。
-
Java四种引用类型——强软弱虚与Cleaner的堆外内存释放链
软引用 OOM 前回收适用内存敏感缓存,弱引用随 GC 清除为 ThreadLocal 键,虚引用加 Cleaner 链表实现堆外内存精确延迟释放。
-
IntegerCache——为什么Integer 127 == Integer 127是true而128不是?
Integer 自动装箱走 valueOf 享元缓存 -128~127 内对象,== 比引用非值 equals 才是正确比较,三元运算类型推断可能触发 NPE 拆箱。
-
Compact Strings——JDK 9如何将String内存占用减半?
JDK 9 用 byte[] 替代 char[] 加 coder 标志位实现紧凑字符串,纯 ASCII 内存减半,coder 被 JIT 内联消除分支无运行时开销。
-
ByteBuffer——HeapByteBuffer与DirectByteBuffer的本质区别
HeapByteBuffer 在 IO 路径多一次堆内到堆外拷贝,DirectByteBuffer 直通内核但依赖 Cleaner 虚引用释放,有隐蔽的堆外内存泄漏风险。
-
BigDecimal——为什么0.1+0.2不等于0.3?
IEEE 754 二进制浮点无法精确表示 0.1,BigDecimal 用十进制定点数模型消除精度误差,金额计算严禁用 double 构造器。