2009-04-13 45 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堆大小。這將對垃圾收集產生直接影響。

相關問題