提到垃圾回收器,Java 开发人员应该都不陌生。Java 虚拟机提供了不同的垃圾回收器实现。这里介绍的 Epsilon 是一个很特别的垃圾回收器,它只负责分配内存,并不回收内存。当堆内存耗尽之后,JVM 直接因为 OutOfMemory 而终止。
Epsilon 在 Java 11 中加入。
一个不回收内存的 GC 实现有什么用呢?Epsilon 有自己的应用场景。
首先是那些运行时间很短的程序,比如命令行程序,定期执行的简单任务。因为这些程序的运行时间很短,在运行过程中进行垃圾回收没有意义。当程序退出之后,所占用的内存会被自动释放。
其次是对延迟和吞吐量很敏感的程序。回收垃圾的操作会带来延迟,Epsilon 完全避免了这些延迟。如果程序在运行过程中使用的堆内存有上限,可以使用 Epsilon 降低延迟和提升吞吐量。
最后是与测试相关的场景。在做应用的性能测试时,使用 Epsilon 可以从性能测试中去掉 GC 的影响,得到更准确的结果。另外一种测试与应用的内存分配上限有关。比如,如果预期应用在运行时分配的内存不会超过 1G。可以使用 Epsilon 并设置堆内存上限为 1G。如果在测试中应用分配的内存超过