在我们对延迟敏感的应用程序中,我们有缓存数据(驻留在 TG 中)和在 YG 中消亡的短暂对象。我已经看到次要 GC 时间和主要 GC 时间有显着差异。我怀疑这与TG的尺寸相对较大有关。 谁能解释 GC 时间如何与 TG 大小相关。 Minor GC 非常频繁和快速。
最佳答案
在 YG 中存活下来的对象被移动到 TG/Old generation 以释放 YG 中的空间。 YG 的大小保持较小,以确保次要收集不会花费太多时间并且可以更频繁地运行。并且在这些仍然具有引用的次要 GC 对象被移动到 TG。
所以 TG 大小更大,因为通常较大的物体在很少的 YG 清理中幸存下来会移动到这个部分。 TG 中的清理也不会经常运行,因此可以分配更大的内存。
所以次要 GC 会清理 YG 中的对象,而主要 GC 会清理 YG 和 TG。
关于JAVA GC 主要 GC 与次要 GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642241/