2009-04-13 48 views

回答

9

是的,最需要的Java垃圾收集器只运行,而不是按计划是否需要或不运行。所以,一般来说,更多的内存会导致频率更低,垃圾收集时间更长。

世代垃圾收集器有settings to control the allocation of memory between the young and tenured generations.通过设置这些使用年轻一代的总内存的一小部分,年轻一代的绝对大小可以保持相同的总堆大小增加。然后,垃圾收集频率或持续时间不会发生很大变化,但是对于像缓存这样的应用程序,您将有更多空间存在长寿命对象。

4

一般的答案是,垃圾将趋向于较少,但收集的GC暂停往往会更长。

这假设您已经拥有比您的工作集大小更多的VM可用内存;否则你可能会花费大量时间进行垃圾回收。

的GC特性变化很大,这取决于集电极你正在使用和Java版本,以及是否除了更高-Xmx指定更高的-Xms。在VM初始化之后,老版本的Java(5之前)没有调整年轻一代的空间大小。所以,即使您指定了非常大的-Xmx值,年轻一代的规模仍然非常小,因此您会看到年轻一代的经常收藏。

当年轻一代回收时,有将是无论如何都会被晋升为终身空间中的一些“年轻”的对象,即使它们是短命的对象。这意味着年老的一代会慢慢地填满死亡的年轻物体,需要定期全面的GC。在年龄代中结束的这类对象的数量与年轻GC的数量成正比(假设程序中的活动持续不变)。因此,年轻一代较大一代的优势在于年轻一代GC的数量将会减少,因此年轻一代的物品数量将会减少到年长一代。

有许多的除了-Xmx调整参数(谷歌的Java GC),你将与他们进行实验,因为最优的设置将针对每个应用而变化。

2

是的,但它取决于您正在使用哪个垃圾回收器。对于这类问题,GC tuning page是一个很好的资源。

1

这样做,因为当你有更多的内存,然后当它涉及到收集和紧凑它有更多的扫描。这意味着当一个(完整的)GC启动时意味着它必须扫描更多的内存,并且可能会压缩更多的内存。也许在更多的背景下我们可以进一步提供帮助显然有三个不同的部分被扫描,所以它不一定直接关联到1-1的意义上。

1

只能间接地,并在运行一段时间后。 -Xmx设置堆允许增长的最大大小,并且不影响初始大小。所以它不会在程序运行的早期影响gc时间或频率。如果gc后堆仍然(太接近)满,堆积量将增加,这就是-Xmx会影响的。 -Xmx的更高设置将允许堆(最终)变大,从而更少触发集合(并且这些集合将花费更长的时间,如其他人所描述的那样)。

但是,如果你的应用程序不使用太多的内存(以便堆是一个GC后大多是空的),堆永远不会和-MX设置都无关紧要。

您可以使用-Xms设置初始GC堆大小。这将对垃圾收集产生直接影响。

相关问题