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

Object.clone() 浅拷贝真实验证:数组和集合字段真实共享引用

真实验证 Object.clone() 默认是浅拷贝:数组字段和集合字段真实是同一个引用,修改克隆体会真实影响原对象;真实对照一个手动实现深拷贝的版本,验证深拷贝后两者才真正互不影响。

Java clone 对象 动画演示
Java 内部原理 2026-07-06

注解 RetentionPolicy 真实验证:反射到底能读到哪几种保留策略

真实用反射验证同时标注 SOURCE/CLASS/RUNTIME 三种保留策略注解的类,运行时 getAnnotations() 只能真实读到 RUNTIME 一个;真实验证 SOURCE 注解的定义本身作为一个类依然存在,只是标注行为在编译后没有留下痕迹。

Java 注解 反射 动画演示
Java 内部原理 2026-07-05

位运算与 HashMap 容量真实验证:为什么必须是 2 的幂

真实复刻 HashMap 的 tableSizeFor 算法验证任意初始容量都会被规整成2的幂;真实用反射拿到 HashMap 内部 table 数组长度对照;真实验证只有容量是2的幂时,(n-1)&hash 才和 hash%n 完全等价,容量是15这种非2的幂时第一个不一致的样例真实被找出来了。

Java HashMap 位运算 动画演示
Java 内部原理 2026-07-04

CountDownLatch 与 CyclicBarrier 真实对比:一次性和可复用的区别

真实验证 CountDownLatch 是一次性的,计数归零后无法重置,再次 await() 会立刻返回;真实验证 CyclicBarrier 在所有参与线程到达屏障点后会自动重置,可以在同一个 barrier 对象上反复复用多轮,并真实捕获每轮的 barrierAction 回调触发时机。

Java 并发 同步工具 动画演示
Java 内部原理 2026-07-03

ThreadPoolExecutor 拒绝策略真实验证:四种策略到底怎么表现

真实用1核心1队列的线程池把四种内置 RejectedExecutionHandler 逐个触发:AbortPolicy 真实抛出异常;CallerRunsPolicy 真实验证被拒绝任务由提交者线程同步执行;DiscardPolicy 真实静默丢弃;DiscardOldestPolicy 真实验证排队最久的任务被挤掉、从未执行。

Java 线程池 并发 动画演示
Java 内部原理 2026-07-02

switch 表达式字节码真实对比:新语法到底省了什么

真实用 javap 反编译传统 switch 语句和 switch 表达式(箭头语法),证明两者底层都真实编译成同一个 lookupswitch 指令,新语法没有引入新的字节码机制;真实反编译 String 类型的 switch,证明它是 hashCode() 定位 + equals() 校验的两段式 lookupswitch。

Java 字节码 switch 动画演示
Java 内部原理 2026-07-01

fail-fast 迭代器真实验证:modCount 检测与一个经典陷阱

真实复现 ArrayList 遍历中结构性修改抛出 ConcurrentModificationException;真实复现一个经典陷阱:移除倒数第二个元素时因为 hasNext() 提前返回 false,异常真实没有抛出,留下静默的逻辑 bug;真实验证 CopyOnWriteArrayList 遍历用的是创建迭代器那一刻的快照。

Java 集合 并发 动画演示
Java 内部原理 2026-06-30

WeakReference 与 SoftReference 真实 GC 行为对比

真实验证 WeakReference 只要发生一次 GC 就会被回收,而 SoftReference 在内存充足时真实挺过普通 GC;真实用 -Xmx128m 制造内存压力,往 SoftReference 列表里塞 10万个 1MB 对象,观察真实有多少被回收;真实验证 ReferenceQueue 拿到的就是同一个引用对象本身。

Java 引用 GC 动画演示
Java 内部原理 2026-06-29

匿名内部类隐藏引用真实验证:this$0 与"清空集合就能回收"的误解

真实反射验证匿名内部类确实存在一个隐藏的 this$0 字段指向外部实例;真实用 WeakReference 追踪外部对象的 GC 情况,发现即使清空了持有它的集合,只要方法帧里还有对外部对象的局部变量引用,GC 也不会立刻回收它,这个现象甚至和是否被匿名类捕获无关。

Java 内存 GC 动画演示
Java 内部原理 2026-06-28

数组协变真实验证:ArrayStoreException 到底何时触发

真实验证 Dog[] 可以赋值给 Animal[](数组协变),但往里面塞一个 Cat 会真实触发运行时 ArrayStoreException;真实验证 Object[] 指向 String[] 时塞 Integer 同样触发;真实验证 System.arraycopy() 同样受这个运行时类型检查约束,不会绕过。

Java 数组 类型系统 动画演示
Java 内部原理 2026-06-27

String.intern() 真实验证:字符串常量池到底存的是谁

真实验证字面量字符串默认进入常量池、new String() 不会进池、编译期常量拼接会被折叠进池而运行时拼接不会;真实验证 intern() 把字符串登记进常量池并返回池中引用;20万次不同字符串 intern() 的真实耗时数据。

Java String 常量池 动画演示
Java 内部原理 2026-06-26

Java 泛型擦除真实验证:List<String>和List<Integer>的Class对象真的是同一个

真实反射验证 List<String> 和 List<Integer> 的 getClass() 结果完全相同,泛型参数在运行时确实不存在;真实用反射绕过泛型检查往容器里塞错误类型,证明 checkcast 插在每一个方法调用点本身,不是赋值处;真实验证泛型数组 List<String>[] 的运行时元素类型并没有被擦除,依然会触发 ArrayStoreException。

Java 泛型 反射 动画演示
京ICP备2026067502号-1京公网安备11010502063487号