Как увеличить скорость звонков GC в Java? - PullRequest
3 голосов
/ 02 августа 2011

Как увеличить скорость звонков GC в Java? Есть ли какие-либо параметры JVM для настройки скорости вызова GC?

Спасибо !!

1 Ответ

5 голосов
/ 02 августа 2011

Если вы измените время паузы ГХ, сборка мусора должна выполняться чаще.Это может быть полезным для некоторых критических по времени приложений, где вам нужно, чтобы сборка мусора занимала не так много времени, даже если их может быть больше.-XpauseTarget должен сделать это как аргумент VM.Минимальное значение здесь составляет 10 миллисекунд.Не звоните System.gc().В зависимости от того, где вы его называете, вы можете сделать ваше приложение чрезвычайно неэффективным.

Лучшая идея - просто оптимизировать ваше приложение, чтобы использовать меньше объектов.Вы можете использовать инструмент, такой как JVisualVM, который поставляется вместе с JDK, чтобы проверить ваше приложение во время выполнения и выяснить, в чем проблема, а также посмотреть информацию о сборке мусора.

Вы также можете попробовать другой мусорколлектор.Я использую следующее, и это помогает мне в некоторых приложениях, где использование памяти, скажем, более важно, чем процессорное время (хотя здесь есть несколько бесполезных опций - просто отсеиваем их):

-Xincgc
-XX:+CMSIncrementalPacing
-XX:+UseAdaptiveSizePolicy
-XX:+AggressiveOpts
-XX:+ExplicitGCInvokesConcurrent
-XX:+UnlockExperimentalVMOptions
-XX:+UseConcMarkSweepGC
-XX:UseSSE=3
-XX:+UseParNewGC
-XX:SurvivorRatio=2
-XX:NewRatio=8
-XX:+DoEscapeAnalysis
-XX:+UseFastAccessorMethods
-XX:+ForceTimeHighResolution
-XX:+UseTLAB
-XX:+ResizeTLAB
-XX:MaxGCPauseMillis=10
-XX:ParallelGCThreads=8
-XX:+CMSParallelRemarkEnabled
-XX:+DisableExplicitGC
-XX:+UseAdaptiveGCBoundary
-XX:-UseGCOverheadLimit
-Xnoclassgc
-server
-Xss128k
-Xms1g
-Xmx1g
...