我决定在我的JavaEE开发环境中的Eclipse Mars RC3上尝试使用G1GC,但我观察到了一个非常奇怪的行为:
如您所见,它已经运行了近700次FULL GCs,而仅有30次minor GCs。此外,我注意到当应用程序处于负载状态时通常会执行minor GCs - 通常是在启动并加载大量内容时,而在空闲时则进行full GCs。(这11个小时中它大部分时间都是空闲的!)我期望当应用程序什么也不做时就没有必要进行GC,或者至少只需要进行一次minor GC。我还监测了Eclipse的内存消耗 - 在空闲时间内它从未增加到超过130-140 MB,这是这些full GCs看起来很奇怪的另一个原因。
这是我的eclipse.ini jvm配置:
这里是GC日志:http://pastebin.com/sVBe4w1A Java版本:OpenJDK 64位服务器VM(25.45-b02),用于Linux-amd64 JRE(1.8.0_45-internal-b14),由“buildd”于2015年5月17日19:21:01使用gcc 4.9.2构建。
您有没有想法,为什么G1GC会在明显不需要进行GC的情况下执行这些full GC?
如您所见,它已经运行了近700次FULL GCs,而仅有30次minor GCs。此外,我注意到当应用程序处于负载状态时通常会执行minor GCs - 通常是在启动并加载大量内容时,而在空闲时则进行full GCs。(这11个小时中它大部分时间都是空闲的!)我期望当应用程序什么也不做时就没有必要进行GC,或者至少只需要进行一次minor GC。我还监测了Eclipse的内存消耗 - 在空闲时间内它从未增加到超过130-140 MB,这是这些full GCs看起来很奇怪的另一个原因。
这是我的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),由“buildd”于2015年5月17日19:21:01使用gcc 4.9.2构建。
您有没有想法,为什么G1GC会在明显不需要进行GC的情况下执行这些full GC?