真实在10核机器上让MIN_PRIORITY和MAX_PRIORITY两个线程同时空转,三轮真实测试比例分别是1.04、0.71、0.91——高优先级线程有时反而比低优先级线程做的工作更少,证明setPriority()只是调度建议,不是保证。
真实起一个睡眠5秒的守护线程,main线程立刻结束,真实测出整个JVM进程只用了0.073秒就退出;真实对照非守护线程场景,JVM真实等待它跑完才退出;真实验证线程默认会继承创建它的线程的daemon状态。
真实验证 flip() 把 limit 设为当前 position;真实验证 clear() 只重置指针不清空底层数组数据;真实验证 compact() 把未读完的数据真实搬到buffer开头;真实验证 rewind() 只重置position不动limit。
真实测出 50万次循环里 String.format() 比 + 拼接慢了13倍多,真实原因是每次调用都要重新解析格式字符串;还有一个意外发现:手写的 StringBuilder 链式调用真实比编译器生成的 + 拼接更慢。
真实验证 List.of() 和 Collections.unmodifiableList() 都会在 add() 时抛异常,但底层机制完全不同:unmodifiableList() 只是只读视图,底层集合变了视图真实同步跟着变;List.of() 真实不允许null元素。
真实用反射攻击一个私有构造器的普通单例类,真实创造出第二个实例;真实用同样的反射手法攻击枚举单例,真实抛出 NoSuchMethodException;真实验证枚举经过序列化再反序列化后,得到的对象和原实例真实是同一个。
真实用反射对比静态嵌套类和非静态内部类:非静态内部类真实携带一个 this$0 隐藏字段和一个隐藏构造器参数,指向外部类实例;静态嵌套类真实没有这个字段,构造器参数真实是空数组。
真实验证 Object.clone() 默认是浅拷贝:数组字段和集合字段真实是同一个引用,修改克隆体会真实影响原对象;真实对照一个手动实现深拷贝的版本,验证深拷贝后两者才真正互不影响。
真实用反射验证同时标注 SOURCE/CLASS/RUNTIME 三种保留策略注解的类,运行时 getAnnotations() 只能真实读到 RUNTIME 一个;真实验证 SOURCE 注解的定义本身作为一个类依然存在,只是标注行为在编译后没有留下痕迹。
真实复刻 HashMap 的 tableSizeFor 算法验证任意初始容量都会被规整成2的幂;真实用反射拿到 HashMap 内部 table 数组长度对照;真实验证只有容量是2的幂时,(n-1)&hash 才和 hash%n 完全等价,容量是15这种非2的幂时第一个不一致的样例真实被找出来了。
真实验证 CountDownLatch 是一次性的,计数归零后无法重置,再次 await() 会立刻返回;真实验证 CyclicBarrier 在所有参与线程到达屏障点后会自动重置,可以在同一个 barrier 对象上反复复用多轮,并真实捕获每轮的 barrierAction 回调触发时机。
真实用1核心1队列的线程池把四种内置 RejectedExecutionHandler 逐个触发:AbortPolicy 真实抛出异常;CallerRunsPolicy 真实验证被拒绝任务由提交者线程同步执行;DiscardPolicy 真实静默丢弃;DiscardOldestPolicy 真实验证排队最久的任务被挤掉、从未执行。