知其然,知其所以然
Python 2026-08-06

有了 GIL,为什么还要手动加锁

字节码级别原子性与语句级别竞态条件的真实边界。

并发 锁 动画演示
Python 2026-08-06

引用计数:对象什么时候真的被释放

不朽对象、循环引用与分代GC的真实源码与实测。

内存管理 垃圾回收 动画演示
Python 2026-08-06

生成器:yield 怎么暂停又恢复

生成器帧对象与 asyncio 协程并发规模的真实对比。

生成器 协程 动画演示
Python 2026-08-06

dict:开放寻址与插入顺序

紧凑双数组设计、哈希碰撞与真实扩容阈值实测。

哈希表 数据结构 动画演示
Python 2026-08-06

元类:class 语句背后的真相

真实拦截 class 语句证明元类被调用,__build_class__ 四步流程与元类冲突判定的真实源码。

元类 语言机制 动画演示
Java 内部原理 2026-08-06

InheritableThreadLocal 真实验证:继承发生在new Thread()那一刻,不是start()

真实验证普通ThreadLocal子线程真实拿不到父线程设置的值,InheritableThreadLocal真实能拿到;真实用时序精确的对照实验证明继承的快照真实发生在new Thread()构造那一刻,不是start()调用时,构造之后父线程再修改值子线程真实还是拿到旧值。

Java ThreadLocal 并发 动画演示
Java 内部原理 2026-08-05

synchronized 可重入性真实验证:同一线程递归4层拿同一把锁真实不会死锁

真实用递归方法反复进入synchronized(lock)代码块,同一线程4层嵌套真实全部成功进入;真实验证子类重写方法调用super.父类方法()同样能重入;真实对照另起一个线程去抢同一把锁,验证重入只对持锁线程本身有效,其他线程真实必须等待。

Java synchronized 并发 动画演示
Java 内部原理 2026-08-04

泛型边界真实验证:T extends Number 擦除后真实变成 Number,不是 Object

真实用反射对比有边界(T extends Number)和无边界(T)两种泛型类的字段擦除结果:有边界的真实擦除成边界类型Number,无边界的真实擦除成Object;真实验证getParameterTypes()和getGenericParameterTypes()对同一参数给出不同结果。

Java 泛型 反射 动画演示
Java 内部原理 2026-08-03

数组 vs ArrayList 性能真实对比:LinkedList中间插入真实慢了18倍

真实测出遍历2000万元素求和,原生int[]数组比ArrayList<Integer>快2.3倍;真实测出在10万元素中间位置插入2万次,直觉上应该更快的LinkedList真实比ArrayList慢了约17倍,因为按索引插入前必须先线性遍历到目标位置。

Java 性能 集合 动画演示
Java 内部原理 2026-08-02

String.valueOf(null) 真实验证:不是所有null安全重载都真的安全

真实验证String.valueOf(Object)对null安全,真实返回字符串"null";真实验证直接调用null.toString()真实抛出NPE;真实验证String.valueOf(char[])这个重载对null数组不做检查,真实同样抛出NullPointerException,证明并非所有重载都安全。

Java String null 动画演示
Java 内部原理 2026-08-01

wait() 虚假唤醒真实验证:为什么必须用 while 不能用 if

真实用if检查等待条件,配合超时触发的虚假唤醒,真实测出5个线程全部越过等待条件继续执行;真实用while循环重新检查条件,同样场景下真实0个线程被误放行;真实验证notify()只唤醒一个线程,notifyAll()才唤醒全部。

Java 并发 wait/notify 动画演示
Java 内部原理 2026-07-31

Cleaner API 真实验证:替代 finalize() 的资源清理兜底机制

真实验证Cleaner注册的清理动作在手动调用Cleanable.clean()时真实立刻执行;真实验证重复调用clean()真实幂等;真实验证忘记手动清理、对象失去强引用后,触发System.gc()并等待,Cleaner后台线程真实会自动执行注册好的清理动作。

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