在我们的延迟敏感应用程序中,我们有缓存数据(驻留在TG中)和在YG中消失的短暂对象。我已经看到,在小GC时间和主要GC时间有显着的差异。我怀疑这与TG的尺寸相对较大有关。有人能解释GC时间和TG大小有什么关系吗?较小的GC是相当频繁和快速。
发布于 2012-11-30 09:38:48
在YG中保存较小集合的对象将被移动到TG/旧代,以腾出YG中的空间。YG的大小保持较小,以确保较小的集合不会花费太多时间,并且可以更频繁地运行。在这些小GC对象中,仍然具有引用的对象被移动到TG。
所以TG的大小更大,因为通常较大的对象,它们能经受很少的YG清理,会移动到这个段。此外,TG中的清理并不经常运行,因此可以分配更大的内存。
因此,小GC清理YG中的对象,而主GC清除YG和TG。
发布于 2012-11-30 09:35:28
主要的一点是GC时间不是由TG大小决定的,而是由其中的对象数量决定的。性能敏感的应用程序不应使用堆进行缓存。有许多现有的缓存库支持堆外缓存。
https://stackoverflow.com/questions/13642241
复制相似问题