在我们的低延迟应用程序中,我们有缓存数据(驻留在TG中)和短寿命的对象,这些对象在YG中消失。我发现小型GC时间和大型GC时间之间存在显着差异。我怀疑这与TG相对较大的大小有关。
有人能解释一下GC时间如何与TG大小相关吗?小型GC非常频繁且快速。
在YG中幸存的对象会被移动到TG / Old代,以释放YG中的空间。 为了确保次要收集不需要太长时间并且可以更频繁地运行,YG的大小保持较小。在这些次要GC期间,仍具有引用的对象会被移动到TG。
因此,TG的大小更大,因为通常在经过几次YG清理后幸存的较大对象会移动到该段。此外,TG中的清理不会很频繁,因此可以分配更大的内存。
因此,次要GC清除YG中的对象,但是主要GC会清除YG和TG。