Epsilon收集器是“只分配、不回收”的实验性GC工具,用于剥离GC干扰以精准定位性能瓶颈、加速短时任务、适配Serverless场景及内存压力测试,仅适用于Java 11+且需显式启用。
Epsilon收集器不是用来替代G1或ZGC的常规GC方案,而是一个“只分配、不回收”的实验性工具。它不清理任何对象,堆一满就抛出OutOfMemoryError并退出JVM。它的价值不在长期运行,而在精准控制、极致轻量和干扰剥离。
在P999/P9999延迟敏感型压测中,传统GC会引入停顿、写屏障开销与缓存抖动,掩盖代码本身或系统层的问题。Epsilon彻底移除这些变量,让所有毛刺100%来自业务逻辑、JIT编译、调度抖动或硬件中断(如网卡中断、CPU降频)。例如同一行情处理路径下,ZGC的P999为86μs,而Epsilon+对象池方案稳定在32±5μs——波动仅由硬件精度决定。
-XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xmx256m
jstat -gc(无GC统计),改用jcmd <pid> VM.native_memory summary观察实时堆占用finalize()、WeakReference等依赖回收机制的API,它们在Epsilon下永不触发策略回测脚本、配置校验工具、日志批量解析等任务,对象生命周期严格绑定于单次执行,总量可预估,且进程退出后OS自动回收全部内存。此时GC线程调度、TLAB同步、内存屏障全是冗余开销。Epsilon将JVM退化为轻量执行容器,消除GC相关争用,加快启动与退出速度。
-Xmx(如-Xmx64m),确保全程分配不超限AWS Lambda、阿里云FC等平台上的Java函数通常执行几毫秒到数秒,JVM不复用、无跨请求状态。传统GC的周期扫描、并发标记反而浪费CPU、引入抖动、抬高冷启动延迟。Epsilon零暂停、零后台线程、零回收逻辑,天然适配这一模型。
ENTRYPOINT ["java", "-Xmx32m", "-XX:+UseEpsilonGC", "-jar", "app.jar"]
当需要验证应用是否会在限定内存内完成任务时,Epsilon是理想探针。例如设定-Xmx1g,若程序因OOM退出,说明实际分配超限,可结合heap dump分析泄漏点或分配热点;若正常结束,则证明内存预算合理。它也常用于VM开发中验证GC接口最小实现的健壮性。