Дополнительно
Ошибка java.lang.OutOfMemoryError: Превышен лимит накладных расходов GC
Я получаю это сообщение об ошибке при выполнении тестов JUnit:
java.lang.OutOfMemoryError: GC overhead limit exceeded
Я знаю, что такое OutOfMemoryError
, но что означает ограничение GC overhead limit? Как я могу решить эту проблему?
761
18
Это сообщение означает, что по какой-то причине сборщик мусора занимает чрезмерное количество времени (по умолчанию 98% всего процессорного времени процесса) и восстанавливает очень мало памяти в каждом запуске (по умолчанию 2% от кучи).
Это фактически означает, что ваша программа перестает выполнять какие-либо действия и все время занята только сборкой мусора.
Чтобы предотвратить расходование процессорного времени вашим приложением без выполнения каких-либо действий, JVM выбрасывает эту
ошибку
, чтобы у вас был шанс диагностировать проблему.Редкие случаи, когда я видел, как это происходит, это когда какой-то код создавал тонны временных объектов и тонны объектов со слабыми ссылками в уже очень ограниченном по памяти окружении.
Подробности смотрите в этой статье (в частности, в этой части).
GC выбрасывает это исключение, когда слишком много времени тратится на сборку мусора при слишком малой отдаче, например, 98% времени процессора тратится на GC, а восстанавливается менее 2% кучи.
Эта функция предназначена для того, чтобы предотвратить длительную работу приложений, которые практически не продвигаются вперед из-за слишком маленькой кучи.
Вы можете отключить эту функцию с помощью опции командной строки
-XX:-UseGCOverheadLimit
.Дополнительная информация [здесь] (http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html#par_gc.oom)
EDIT: похоже, кто-то может печатать быстрее меня :)
Если вы уверены, что там нет утечки памяти в вашу программу, попробуйте:
-начала XX:+UseConcMarkSweepGC
.При необходимости, проверка лимита может быть отключена путем добавления опции
-ХХ:-UseGCOverheadLimit
в командной строке.Обычно это код. Вот простой пример:
Использую java 1.6.0_24-b07 На Windows7 32 bit.
java -Xloggc:gc.log GarbageCollector
Затем посмотрите на gc.log
Конечно, это не лучший тест или лучший дизайн, но когда вы сталкиваетесь с ситуацией, когда у вас нет выбора, кроме как реализовать такой цикл, или когда вы имеете дело с существующим кодом, который ведет себя плохо, выбор повторного использования объектов вместо создания новых может уменьшить количество раз, когда сборщик мусора встает на пути...
Причиной Ошибка
После сборки мусора, если Java-процесс тратит больше, чем примерно 98% своего времени делает вывоз мусора и если он восстанавливается менее чем 2% кучи и занимается до сих пор последние 5 (время компиляции константу) последовательных сборки, то Ява.яз.Исключение OutOfMemoryError бросается
Xms1g -Xmx2g
, попробуйте-Начала XX:+UseG1GC -ХХ:G1HeapRegionSize=Н -начала XX:MaxGCPauseMillis=м -ХХ:ParallelGCThreads=Н-ХХ:ConcGCThreads=Н
Взгляните на еще некоторые вопросы относительно G1GC
https://stackoverflow.com/questions/8111310/java-7-jdk-7-garbage-collection-and-documentation/34254605#34254605
https://stackoverflow.com/questions/2254041/java-g1-garbage-collection-in-production/34254401#34254401
Оракул technetwork статьи для отладки ГК
Просто увеличить размер кучи немного, установив этот параметр в
Запуск конфигурации → выполнить → Аргументы → аргументы ВМ
в
Функции - для минимального предела
Сайт Xmx - для максимального предела
Для меня, следующие этапы работы:
затмение.файл ini
в
-Xms40m -Xmx512m
для
в
-Xms512m -Xmx1024m
См. здесь
Следующие работал для меня. Просто добавьте следующий фрагмент:
попробуйте это
открыть построить.файл Gradle`
увеличение javaMaxHeapsize в сборке.Gradle в(модуль:приложения) файла
на (добавьте эту строку в Gradle)
Ява описания размер кучи (отправляй по xms, Xmx значение, xmn аэропорт)
Устанавливает начальный размер "кучи" Java. Размер по умолчанию-2097152 (2 МБ). Значения должны быть кратными, и больше, чем 1024 байта (1 КБ). (К -серверу флаг увеличивает размер по умолчанию 32М.)
Устанавливает начальный размер кучи Java для генерации Иден. Значение по умолчанию-640К. (Интернет -сервер флаг увеличивает размер по умолчанию 2М.)
Задает максимальный размер кучи Java может расти. Размер по умолчанию-64М. (Интернет -сервер флаг увеличивает размер по умолчанию для 128М.) Максимальный лимит кучи около 2 ГБ (2048 Мб).
Аргументы Java памяти (xms, Xmx значение, xmn аэропорт) форматирование
При определении размера кучи Java, вы должны указать ваш аргумент памяти, используя одну из букв “M” или “M” для Мб, или “G” или “G” для ГБ. Ваша установка не будет работать, если вы укажите “МБ” и “ГБ”. Веские аргументы выглядят так:
-Xms64m или -Xms64M -Xmx1g или -Xmx1G Также можно использовать, чтобы указать 2048 Мб 2 ГБ Также, убедитесь, что вы просто использовать целые числа при указании аргументов. Используя -Xmx512m-это допустимый вариант, но -Xmx0.5г приведет к ошибке.
Эта ссылка может быть полезной для кого-то.
Перезагрузка моего MacBook исправила эту проблему для меня.
Вы также можете увеличить объем памяти и размер кучи, добавляя это к вашему `градля.файл свойств:
орг.градля.jvmargs=-Xmx2048M -XX веков\:MaxHeapSize\=32г
Это не'т должны быть 2048M и 32г, сделать его как большой, как вы хотите.
Чтобы увеличить размер кучи в IDEA IntelliJ следуйте следующей инструкции. Он работал для меня.
Для Пользователей Windows,
Перейдите к расположению, где IDE установлено и искать следующую.
Откройте файл и добавьте следующие.
Что это !!
Я'м работает в Android Studio и столкнулся с этой ошибкой при попытке создать подписанный APK для релиза. Я был в состоянии построить и протестировать отладка Android игры без проблем, но как только я захотел построить выпустить АПК, процесс сборки будет работать в течение нескольких минут и затем, наконец, завершить с помощью "Ошибка Java.яз.Исключение OutOfMemoryError: GC и накладные расходы превышен лимит на". Я увеличил размер кучи для виртуальной машины и компилятор Андроид Декс, но проблема сохраняется. Наконец, после многих часов и кружек кофе выяснилось, что проблема была в моем приложении-уровень 'построить.Gradle в' файл - я 'minifyEnabled' параметр для построения релиза тип 'ложь', следовательно запуск программы ProGuard питания на код, который еще'т быть через код-застенчивая' процесс (см. https://developer.android.com/studio/build/shrink-code.html). Я изменил 'minifyEnabled' параметр 'правда' и сборка выполняются как сон :)
Короче, мне пришлось изменить мои приложения-уровень 'построить.Gradle в' файл с: //...
для
Вам нужно увеличить размер памяти в Jdeveloper иди на setDomainEnv.УМК.
и
Решена: Просто добавить
орг.градля.jvmargs=-Xmx1024m
в `градля.свойства и если он не существует, создайте его.В NetBeans, он может оказаться полезным для разработки максимальный размер кучи. Перейти в Выполнить => настройка конфигурации проекта => Персонализация. В выполнить его всплыло окно, перейдите к ВМ, заполнить
-Xms2048m -Xmx2048m
. Это может решить проблемы размера кучи.