Я решил попробовать G1GC на своей установке Eclipse Mars RC3 для разработчиков JavaEE, но заметил очень странное поведение:
Как видите, он выполнил почти 700 ПОЛНЫХ сборщиков мусора за жизненный цикл приложения и только 30 второстепенных сборщиков мусора. Также я заметил, что второстепенные сборщики мусора выполняются, когда приложение находится под нагрузкой - обычно, когда оно запускается и загружает много материала, в то время как полное сборщик мусора выполняется, когда оно находится в режиме ожидания. (Большую часть этих 11 часов оно простаивало!) Я ожидаю, что когда приложение ничего не делает, в сборщике мусора не будет необходимости, или, по крайней мере, это будет второстепенный сборщик мусора. Я также следил за потреблением памяти eclipse - во время простоя оно никогда не превышало 130-140 МБ, так что это еще одна причина, по которой эти полные сборщики мусора выглядят странно.
Вот моя конфигурация jvm eclipse.ini:
-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: 64-разрядная серверная виртуальная машина OpenJDK (25.45-b02) для linux-amd64 JRE (1.8.0_45-internal-b14), собранная 17 мая 2015 г., 19:21:01, by buildd с gcc 4.9.2
Вы хоть представляете, почему G1GC выполняет полный сборщик мусора, когда очевидно, что сборщик мусора вообще не нужен?