[英]JAVA GC Major GC vs Minor GC
在对延迟敏感的应用程序中,我们具有缓存数据(驻留在TG中)和寿命短的对象,这些对象在YG中消失了。 我已经看到次要GC时间和主要GC时间存在显着差异。 我怀疑这与TG的相对较大有关。 任何人都可以解释GC时间与TG大小如何相关 。 次要GC非常频繁且快速。
在YG中少量收集下来的对象将移至TG / Old Generation,以释放YG中的空间。 YG的大小保持较小,以确保次要收集不会花费太多时间,并且可以更频繁地运行 。 在这些仍具有引用的次要GC对象期间,将其移至TG。
因此TG的大小更大,因为通常在几乎没有YG清理的情况下,较大的对象会移到这个部分 。 另外,TG中的清理操作不是很频繁,因此可以分配更大的内存。
因此,次要GC会清理YG中的对象,但主要GC会清理YG和TG。
要点是GC时间不是由TG大小决定的,而是由其中对象的数量决定的。 性能敏感的应用程序不应将堆用于缓存。 现有各种各样的缓存库都支持堆外缓存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.