在我们的延迟敏感应用程序中,我们有缓存数据(驻留在TG中)和在YG中消失的短期对象。我看到小GC时间和主要GC时间有显着差异。我怀疑它与相对较大的TG相关。 任何人都可以解释GC时间如何与TG大小相关。次要GC非常频繁和快速。
答案 0 :(得分:1)
在YG中经过次要收集的对象被移动到TG /老一代以释放YG中的空间。 YG的大小保持较小,以确保次要收集不会花费太多时间并且可以更频繁地运行。在这些次要的GC对象中,仍然有引用被移动到TG。
因此,TG尺寸更大,因为通常较大的物体在YG清理过程中会移动到此段。 TG中的清理也不会频繁运行,因此可以分配更大的内存。
因此,小型GC会清除YG中的对象,但主要的GC会清除YG和TG。
答案 1 :(得分:0)
重点是GC时间不是由TG大小决定的,而是由它中的对象数决定的。性能敏感的应用程序不应使用堆进行缓存。有许多现有的缓存库支持堆外缓存。