在運行Java程序時是否添加-Xmx參數會導致垃圾收集器採取不同的行爲或不經常發生?設置Java程序的最大內存是否影響GC?
回答
是的,最需要的Java垃圾收集器只運行,而不是按計劃是否需要或不運行。所以,一般來說,更多的內存會導致頻率更低,垃圾收集時間更長。
世代垃圾收集器有settings to control the allocation of memory between the young and tenured generations.通過設置這些使用年輕一代的總內存的一小部分,年輕一代的絕對大小可以保持相同的總堆大小增加。然後,垃圾收集頻率或持續時間不會發生很大變化,但是對於像緩存這樣的應用程序,您將有更多空間存在長壽命對象。
一般的答案是,垃圾將趨向於較少,但收集的GC暫停往往會更長。
這假設您已經擁有比您的工作集大小更多的VM可用內存;否則你可能會花費大量時間進行垃圾回收。
的GC特性變化很大,這取決於集電極你正在使用和Java版本,以及是否除了更高-Xmx指定更高的-Xms。在VM初始化之後,老版本的Java(5之前)沒有調整年輕一代的空間大小。所以,即使您指定了非常大的-Xmx值,年輕一代的規模仍然非常小,因此您會看到年輕一代的經常收藏。
當年輕一代回收時,有將是無論如何都會被晉升爲終身空間中的一些「年輕」的對象,即使它們是短命的對象。這意味着年老的一代會慢慢地填滿死亡的年輕物體,需要定期全面的GC。在年齡代中結束的這類對象的數量與年輕GC的數量成正比(假設程序中的活動持續不變)。因此,年輕一代較大一代的優勢在於年輕一代GC的數量將會減少,因此年輕一代的物品數量將會減少到年長一代。
有許多的除了-Xmx調整參數(谷歌的Java GC),你將與他們進行實驗,因爲最優的設置將針對每個應用而變化。
是的,但它取決於您正在使用哪個垃圾回收器。對於這類問題,GC tuning page是一個很好的資源。
這樣做,因爲當你有更多的內存,然後當它涉及到收集和緊湊它有更多的掃描。這意味着當一個(完整的)GC啓動時意味着它必須掃描更多的內存,並且可能會壓縮更多的內存。也許在更多的背景下我們可以進一步提供幫助顯然有三個不同的部分被掃描,所以它不一定直接關聯到1-1的意義上。
只能間接地,並在運行一段時間後。 -Xmx設置堆允許增長的最大大小,並且不影響初始大小。所以它不會在程序運行的早期影響gc時間或頻率。如果gc後堆仍然(太接近)滿,堆積量將增加,這就是-Xmx會影響的。 -Xmx的更高設置將允許堆(最終)變大,從而更少觸發集合(並且這些集合將花費更長的時間,如其他人所描述的那樣)。
但是,如果你的應用程序不使用太多的內存(以便堆是一個GC後大多是空的),堆永遠不會和-MX設置都無關緊要。
您可以使用-Xms設置初始GC堆大小。這將對垃圾收集產生直接影響。
- 1. 應用程序大小是否影響啓動速度和內存大小
- 2. GC Clojure/Java/JVM內存設置
- 3. GC是否會影響設備電池的顯着降低?
- 4. -Xmx是否停止自動GC直到消耗最大內存?
- 5. 最大堆大小xmx如何影響Java中的內存分配/使用堆?
- 6. Java GC運行調整影響
- 7. java類的大小是否會影響應用程序的性能
- 8. uiscrollview的內容大小中的大值是否會影響設備內存中的分配?
- 9. 存儲過程的位置是否影響其性能?
- 10. java程序代碼的編碼是否影響編譯?
- 11. Java:語言環境是否影響格式化程序的JFormattedTextField
- 12. 如何影響堆內存的大小?
- 13. 串行GC對遠程應用程序的影響?
- 14. asp.net設置是否會影響經典asp(IIS 6設置)
- 15. 鎖定LOH中的對象是否影響GC性能?
- 16. ANSI C是否對內存中的程序大小設置了限制?
- 17. node_modules的大小是否影響離子應用程序的大小?
- 18. 設置最大內存使用C#
- 19. Twemcache超出最大內存設置
- 20. SQL Server最大內存設置
- 21. 如何設置Redis最大內存?
- 22. 設置最大內存使用率?
- 23. IBOutlets強大還是弱點 - 它實際上是否影響內存管理? (ARC)
- 24. 將影響Java內存使用情況的Linux配置?
- 25. 大班是否會影響表現?
- 26. 表大小是否影響INSERT性能?
- 27. 在父進程中更改的共享內存是否會影響子進程?
- 28. PHP SoapServer是否受最大執行時間影響?
- 29. 數據庫(最大)字段長度是否會影響性能?
- 30. 如何最大化應用程序對事件的影響?