我有,有很多記憶流失了大量堆分配的Clojure的應用程序運行,所以它適當地設置JVM選擇採用:JVM運行老根垃圾收集時,老根是「空」
-Xmx13g -XX:+UseConcMarkSweepGC -XX:NewSize=10G -server -XX:+UseParNewGC
這在大多數情況下都是有效的,並且避免了新代碼溢出到舊代的問題(有時仍然會讓代碼生存下來,但並不總是),但有時我們會看到像JVM運行CMS /舊代碼垃圾收集新一代充滿時真的很難。但我的理解是,這應該由新一代垃圾收集器來處理。
兩個問題。爲什麼舊的垃圾收集器在老舊的幾乎是空的時候運行,但是新的舊的垃圾收集器呢?是否還有進一步的調整可以減少GC不可避免地造成的停頓/減速?
ETA:運行OpenJDK的8
ETA 2:GC日誌:https://gist.github.com/gworley3/6abb9ab52320c6cbd508
我沒有看到舊空間是垃圾收集的跡象。 – AppX
基於查看運行CMS的大量CPU時間(請參閱圖像中的垃圾回收CPU時間圖) –
您應該啓用GC日誌併發布相當大的樣本。您還應該指定您正在使用的JVM版本。此外,你的新的gen大小似乎過度。 – the8472