Если вы измените время паузы ГХ, сборка мусора должна выполняться чаще.Это может быть полезным для некоторых критических по времени приложений, где вам нужно, чтобы сборка мусора занимала не так много времени, даже если их может быть больше.-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