Какое время выборки использует JVM для выдачи 'java.lang.OutOfMemoryError: превышен предел накладных расходов GC'? Я знаю, что вы можете контролировать 98% и 2% с помощью параметров GCTimeLimit и GCHeapFreeLimit, но каково время выборки?
Ответы:
Из Java SE 6 HotSpot [tm] Настройка сборки мусора виртуальной машины
продолжение
Чрезмерное время сборки мусора и ошибка OutOfMemoryError
Параллельный сборщик выдаст OutOfMemoryError, если на сборку мусора тратится слишком много времени: если на сборку мусора уходит более 98% общего времени и восстанавливается менее 2% кучи, будет выброшено OutOfMemoryError. Эта функция предназначена для предотвращения запуска приложений в течение длительного периода времени при незначительном прогрессе или отсутствии прогресса из-за слишком маленькой кучи. При необходимости эту функцию можно отключить, добавив параметр -XX: -UseGCOverheadLimit в командную строку.
Политика такая же, как и в параллельном сборщике, за исключением того, что время, потраченное на выполнение параллельных сборов, не учитывается в 98% -м ограничении времени. Другими словами, только сборы, выполненные, когда приложение остановлено, засчитываются в чрезмерное время сборки мусора. Такие коллекции обычно возникают из-за сбоя в параллельном режиме или явного запроса на сбор (например, вызов System.gc ()).
в сочетании с проходом ниже
Одно из наиболее часто встречающихся применений явной сборки мусора происходит с распределенной сборкой мусора (DGC) RMI. Приложения, использующие RMI, относятся к объектам в других виртуальных машинах. Сбор мусора в этих распределенных приложениях невозможно без периодической сборки локальной кучи, поэтому RMI периодически принудительно выполняет полную сборку. Частоту этих коллекций можно контролировать с помощью свойств. Например,
java -Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
указывает явный сбор один раз в час вместо стандартной скорости один раз в минуту. Однако из-за этого может потребоваться гораздо больше времени для восстановления некоторых объектов. Эти свойства могут быть установлены такими высокими, как Long.MAX_VALUE, чтобы время между явными сборами было фактически бесконечным, если нет желания устанавливать верхнюю границу своевременности активности DGC.
Кажется, подразумевается, что период оценки для определения 98% составляет одну минуту, но его можно настроить на JVM Sun с правильным определением.
Конечно, возможны и другие интерпретации.
-XX:+DisableExplicitGC
это не повлияет на конфигурацию, связанную с RMI, и система будет вызывать gc с частотой, заданной параметром-Dsun.rmi.dgc.server.gcInterval
-Dsun.rmi.dgc.server.gcInterval
свойство существует с Java 1.2.