我決定嘗試在我的Eclipse火星RC3爲JavaEE的開發人員安裝G1GC,但我發現一個很奇怪的現象:G1GC奇怪的行爲
正如你可以看到它幾乎已經運行700 FULL GC應用程序的生命週期,而只有30個小型GC。另外我注意到,小應用程序在應用程序負載下執行時 - 通常在啓動並加載大量內容時,而在空閒時執行完整的GC。 (這11個小時中大部分時間都是空閒的!)我預計,當應用程序什麼都不做時,不需要GC,或者至少它會是一個小GC。我還監測了eclipse的內存消耗 - 在空閒時間內,它從未增加到130-140 MB以上,所以這是完整GC的奇怪之處的另一個原因。
這裏是我的eclipse.ini JVM配置:
-server
-Xverify:none
-XX:+AggressiveOpts
-XX:+UseG1GC
-XX:MaxGCPauseMillis=100
-XX:+UseStringDeduplication
-XX:+UseCompressedOops
-XX:+UseCompressedClassPointers
-XX:MaxMetaspaceSize=256m
-Xloggc:/home/svetlin/software/eclipse/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=20m
-Xms1g
-Xmx1g
這裏是GC日誌:http://pastebin.com/sVBe4w1A
Java版本:OpenJDK的64位服務器VM(25.45-B02)用於Linux的AMD64 JRE (1.8.0_45-internal-b14),建立於2015年5月17日19:21:01通過「buildd」使用gcc 4.9.2
你知道爲什麼G1GC做這些完整的GC時,顯然不需要對於GC來說呢?
大聲笑,我應該手動查看日誌而不是使用GCViewer。儘管哪個組件調用了System.gc()以及爲什麼,這很有趣。 –
附加一個調試器並在該方法上設置一個斷點 – the8472