Верхний предел GC превышен

Что такое время выборки, которое JVM использует для сброса 'java.lang.OutOfMemoryError: превышен ли верхний предел GC? Я знаю, что вы можете контролировать 98% и 2% с параметрами GCTimeLimit и GCHeapFreeLimit, но каково время выборки?

Ответ 1

Из Java SE 6 HotSpot [tm] Настройка настройки мусора виртуальной машины

следующее

Чрезмерное время GC и OutOfMemoryError

Параллельный сборщик выкинет OutOfMemoryError, если слишком много время тратится на сбор мусора: если более 98% общее время тратится на сбор мусора и менее 2% куча будет восстановлена, OutOfMemoryError будет выброшен. Эта особенность предназначена для предотвращения запуска приложений для расширенного период времени при незначительном или незначительном прогрессе, поскольку куча слишком маленький. При необходимости эту функцию можно отключить, добавив вариант -XX: -UseGCOverheadLimit в командной строке.

Политика такая же, как в параллельном сборнике, за исключением того, что время, затрачиваемое на выполнение параллельных коллекций, не учитывается 98%. Другими словами, только коллекции, выполненные во время приложение прекращает отсчет в сторону чрезмерного времени GC. такие сбор обычно происходит из-за сбоя в параллельном режиме или явный запрос на сбор (например, вызов System.gc()).

в сочетании с проходом далее вниз

Одно из наиболее часто встречающихся видов использования явного мусора сбор происходит с распределенной сборкой мусора RMIs (DGC). Приложения, использующие RMI, относятся к объектам других виртуальных машин. Мусор не может собираться в этих распределенных приложениях без иногда собирают местную кучу, поэтому RMI заставляет полные коллекции периодически. Частоту этих коллекций можно контролировать со свойствами. Например,

java -Dsun.rmi.dgc.client.gcInterval=3600000

-Dsun.rmi.dgc.server.gcInterval=3600000 задает явную коллекцию один раз в час вместо стандартной по умолчанию один раз за минута. Однако это может также привести к тому, что некоторые объекты будут занимать намного больше времени для исправления. Эти свойства могут быть установлены как Long.MAX_VALUE чтобы время между явными коллекциями эффективно бесконечно, если нет никакого стремления к верхней оценке своевременности DGC деятельность.

Кажется, что период оценки для определения 98% составляет одну минуту, но он может быть настроен на Sun JVM с правильным определением.

Конечно, возможны и другие интерпретации.