Возможно, вам следует попробовать использовать -Xms20G и -Xmx20G, чтобы избежать изменения размера. Важно отметить, что при каждом изменении размера JVM выполняется полный сборщик мусора, поэтому избегание этого процесса - хороший способ минимизировать количество полных сборок мусора.
Пожалуйста, прочитайте это
"Когда JVM Hotspot запускается, куче, молодому поколению и пространству поколения перми выделяются их начальные размеры, определяемые параметрами -Xms, -XX: NewSize и -XX: PermSize соответственно, и увеличиваются как необходимо до максимального зарезервированного размера, который равен -Xmx, -XX: MaxNewSize и -XX: MaxPermSize. JVM может также уменьшить реальный размер во время выполнения, если память не нужна так сильно, как было указано изначально. Однако каждое изменение размера запускает полную сборку мусора (GC) и, следовательно, влияет на производительность. Рекомендуется, чтобы начальный и максимальный размеры были идентичными "
Источник: http://www.oracle.com/us/products/applications/aia-11g-performance-tuning-1915233.pdf
Если бы вы могли предоставить свой gc.log, было бы полезно тщательно проанализировать этот случай.
С уважением, RCC