Java Cleaner 实战:替代废弃的 finalize() 做堆外资源清理,以及强引用导致永不回收的坑你可能在老代码里见过 finalize(),想着"对象被回收前自动关一下资源多方便"。但 finalize() 从 Java 9 起就被 @Deprecated,Java 18 更是标了 forRemoval。原因很实在:它执行时机不确定、拖慢 GC、异常被吞、甚至能让对象"复活"。Java 9 给的正牌替代是 java.lang.ref.Cleaner。这篇讲清楚怎么用它做兜底清理,以及那个能让清理永远不触发的隐蔽坑。