Порог на старом пространстве в сборщике мусора ParallelOldGC

Я использую ParallelOldGC в качестве сборщика мусора в своем приложении. Максимальный размер кучи установлен как 2 ГБ и работает с обновлением горячей точки Java 6, 27.

Мое приложение создает так много объектов с длительным сроком службы, из-за которых старое пространство заполнилось. Таким образом, в соответствии с алгоритмом параллельного GC, полный GC запускается, когда старое пространство почти заполнено. Поскольку размер кучи составляет 2 ГБ, поэтому для очистки старого пространства сборщику требуется более 100 секунд, что неприемлемо.

Я думаю установить порог для старого пространства, скажем, 30, чтобы, когда старое пространство заполнялось на 30%, вызывался полный сборщик мусора, поскольку это решение увеличит количество полных сборщиков мусора, но уменьшит время паузы приложения.

Я заметил, что CMS содержит такое средство с XX:CMSInitiatingOccupancyFraction, но из-за некоторого недостатка CMS не может переключиться на CMS. Так есть ли какое-либо средство для установки в ParallelOldGC

Заранее спасибо.


person Kick    schedule 28.05.2014    source источник


Ответы (1)


Поскольку размер кучи составляет 2 ГБ, сборщику требуется более 100 секунд для очистки старого пространства, что неприемлемо.

Поскольку то, что вы на самом деле пытаетесь решить, — это длительное время паузы, вы можете установить целевое время паузы с помощью -XX:MaxGCPauseMillis=, и сборщик попытается достичь этого.

Он может не соответствовать ему по разным причинам, например. потому что не разрешено тратить достаточно процессорного времени на сбор (через GCTimeRatio) или просто потому, что у вас так много старых живых объектов, что цель не может быть достигнута (в этих случаях используйте G1 или CMS).

person the8472    schedule 25.05.2015