3

在我们对延迟敏感的应用程序中,我们有缓存数据(驻留在 TG 中)和在 YG 中消失的短期对象。我已经看到次要 GC 时间和主要 GC 时间存在显着差异。我怀疑这与相对较大的TG有关。 谁能解释 GC 时间与 TG 大小的关系。Minor GC 非常频繁且快速。

4

2 回答 2

2

在 YG 中的次要收集中幸存下来的对象被移动到 TG/Old 代以释放 YG 中的空间。YG 的大小保持较小,以确保次要收集不会花费太多时间并且可以更频繁地运行。并且在这些仍然有引用的次要 GC 对象被移动到 TG。

所以 TG 尺寸更大,因为通常在 YG 清理中幸存下来的较大对象会移动到该段。TG 中的清理也不会很频繁地运行,因此它可以分配更大的内存。

因此,次要 GC 会清理 YG 中的对象,但主要 GC 会清理 YG 和 TG。

于 2012-11-30T09:38:48.473 回答
0

要点是 GC 时间不是由 TG 大小决定的,而是由其中的对象数量决定的。对性能敏感的应用程序不应使用堆进行缓存。有大量支持堆外缓存的现有缓存库。

于 2012-11-30T09:35:28.130 回答