垃圾收集时间与对象数量或对象大小有关吗?

时间:2014-01-10 11:55:38

标签: java memory garbage-collection heap heap-memory

我遇到了垃圾收集缓慢的问题。显然,堆中的对象越多(其他条件相同)将导致更长的GC时间,堆中更大的对象将导致更长的GC时间。

但是我想知道对象大小和对象数量之间的权衡。例如,比较两组具有相同总兆字节的对象但一组具有1,000,000个对象而另一组具有5个对象,这对GC更快?

3 个答案:

答案 0 :(得分:4)

它与对象的数量和复杂性以及引用的数量有关。基本上,访问和标记“可达”的所有内容需要多长时间。

这是因为它会执行mark and sweep,它会从根目录移动到提示并标记可以到达的所有内容。无论大小如何,其他所有内容都被标记为空闲内存。

整体GC效果

正如@Nick Holt的评论中所提到的,垃圾收集会更频繁地发生在较大的对象上,因为它们会更快地填充堆,从而影响GC的性能。清除100Gig对象仍然比清除100Gig的10Meg对象更快。

答案 1 :(得分:3)

对象大小对GC性能的影响很小,而对象 count 很重要。因此,考虑到这些对象的固定内存占用,您可以期望更大的对象具有更好的性能。

答案 2 :(得分:0)

有小型和主要的GC。次要速度取决于新尺寸主要取决于旧尺寸和其中的对象数量。至于对象大小,我假设当处理大的未反对对象时GC的速度可能更高,因为当GC遇到未引用的对象时它只是跳过它。