调大Eden区会增加Minor GC的时间?

it2024-05-14  45

首先反驳一下调大Eden区会增加Minor GC的说法,这里我们可以简单的把Minor GC分为两步骤,一是扫描新生代(T1),二是复制存活对象(T2),所以整个Minor GC的时间就是T1+T2。而增大Eden区,Eden区中能够容纳的存活对象可能会更多,自然也就推迟了Minor GC被触发的时间,毕竟只有Eden区满了才会触发Minor GC。

假设

有一个对象,能够存活500ms的时间,而Minor GC的间隔是300ms,那么此时该对象的Minor GC的时间T1+T2,然后增加Eden区内存,Minor GC的间隔变为了600ms,那么这个只存活500ms的对象就会在Eden区就被回收掉,而不用再做复制对象的操作。当然了,由于Eden区变大,所以要扫描的存活对象也可能变多,那么T1的时间就很可能增大,但是一般情况下,在虚拟机中,复制对象的开销要远高于扫描。

总结

所以调大Eden区,虽然可能会增加扫描时间,但是也能减少一些较长时间存活对象的复制成本,并不能简单的断定调大Eden区就会增加Minor GC的时间,还是得做一些测试,以实验数据来衡量结果。

最新回复(0)