Превышен лимит накладных расходов GC - PullRequest
93 голосов
/ 07 декабря 2010

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

1 Ответ

82 голосов
/ 07 декабря 2010

С 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% длится одну минуту, но его можно настроить на JVM Sun с правильным определением.

Конечно, возможны и другие толкования.

...