мгновенный запуск java.lang.OutOfMemoryError: превышен предел накладных расходов GC

Я обновился до Android Studio 2.1 и получил эту ошибку, когда пытался создать и запустить свой большой корпоративный проект:

Не удалось выполнить задачу ': app: transformClassesWithDexForMyAppDebug'. com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: превышен предел накладных расходов GC

Я поискал по форуму и отключил мгновенный запуск, также напишите в свой build.gradle:

dexOptions {
    incremental true
    javaMaxHeapSize "6g"
}
...
dependencies{
    compile 'com.android.support:multidex:'
}

Но мою проблему это не решило. В моем градиенте включен multidex, потому что без него я получаю ошибку:

com.android.dex.DexIndexOverflowException: идентификатор метода отсутствует в [0, 0xffff]: 65536

так что это было решение для него, и оно работало раньше с предыдущими версиями Android Studio (также работало для других в компании, которые используют Android Studio 1.4-2.0), но не для меня, так как я обновил свою Android Studio.

У кого-нибудь есть идеи, что может вызвать проблему?

Что еще интересно, если я просто создаю проект, я не получаю сообщение об ошибке, только если я пытаюсь его запустить. Любая идея приветствуется!

РЕДАКТИРОВАТЬ 1:

Что еще интересно, если я перезапущу свою студию Android, то первый запуск будет успешным, а второй - нет.

РЕДАКТИРОВАТЬ 2:

Если я установлю размер кучи больше (например, 8-10 г), то приложение даже не компилируется при первом запуске.

РЕДАКТИРОВАТЬ 3:

Кажется, проблема связана с мгновенным запуском, если я заставляю студию Android не использовать его (например, развертывание на двух устройствах одновременно или изменение gradle.properties, как в ответе), ошибка исчезает.


person bendaf    schedule 15.04.2016    source источник
comment
Мгновенный запуск добавляет методы в программу и, по-видимому, заставляет вас выйти за предел в 65k. Вы случайно добавляете игровые сервисы к своим зависимостям?   -  person EpicPandaForce    schedule 15.04.2016
comment
Я отключил мгновенный запуск в таких настройках, как этот ответ: stackoverflow.com/a/36637692/3162918   -  person bendaf    schedule 15.04.2016
comment
Я весь день пытался исправить эту ошибку ...   -  person Aspicas    schedule 15.04.2016
comment
Есть предложения по ее решению? @bendaf   -  person Aspicas    schedule 15.04.2016
comment
Если бы я хотел, я бы не спросил:, ˙ (   -  person bendaf    schedule 15.04.2016
comment
@EpicPandaForce есть еще идеи?   -  person bendaf    schedule 15.04.2016
comment
@bendaf проверь мой ответ, я решил.   -  person Aspicas    schedule 15.04.2016
comment
Позвольте нам продолжить это обсуждение в чате.   -  person bendaf    schedule 15.04.2016


Ответы (4)


Добавьте это в свой gradle.properties файл.

# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
org.gradle.daemon=true

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true

# Enables new incubating mode that makes Gradle selective when configuring projects.
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true

Найдено здесь

А на моем build.gradle:

....
     dexOptions
         {
               incremental false
               javaMaxHeapSize "2048M" 
               preDexLibraries = false
         }//end dexOptions

....
person Aspicas    schedule 15.04.2016
comment
Похоже, проблема в мгновенном пробеге. Насколько я понимаю, эта настройка отключает его. - person bendaf; 15.04.2016
comment
@bendaf Я прочитал это, но не со своей проблемой, потому что у меня был отключен мгновенный запуск - person Aspicas; 15.04.2016
comment
Итак, у вас есть функция мгновенного запуска после того, как вы отредактировали свой gradle.properties? У вас есть значок освещения рядом со значком бега? потому что я включил мгновенный запуск в настройках, но у меня его нет. : / - person bendaf; 15.04.2016
comment
Да, теперь я включил свой отредактированный gradle.properties file, и да, когда я запускаю приложение, значок освещения автоматически появляется на моем значке запуска ... может быть, ваш Android Studio он поврежден? - person Aspicas; 15.04.2016
comment
Загляните в эту проблему сегодня, эти изменения исправили ее, спасибо! - person blueice; 15.04.2016
comment
Что делать, если у меня нет gradle.properies? - person ssuukk; 17.04.2016
comment
Вы на AndroidStudio? @ssuukk - person Aspicas; 17.04.2016
comment
Привет, из прочитанного (developer.android.com/studio/run/index .html), org.gradle.jvmargs должен быть -Xmx3072m, который состоит из значения по умолчанию -Xmx10248m + javaMaxHeapSize 2048M, но почему вы устанавливаете его только на -Xmx2048m? - person Fruit; 13.06.2016

Шаг 1. Измените build.grade

defaultConfig {
        ...
        // Enabling multidex support.
        multiDexEnabled true
       }

dependencies {
        ...
        compile 'com.android.support:multidex:1.0.0'
    }

Шаг 2. Настройка класса приложения

public class MyApplication extends Application {

@Override
public void onCreate() {
    super.onCreate();
    MultiDex.install(this);
}

}

Шаг 3. Измените grade.properties

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Это будет работать!. Спасибо.

person sonnv1368    schedule 20.07.2016

Другой способ установить размер кучи для конкретных заданий - использовать переменные среды для каждого задания. Это гарантирует, что память будет доступна, когда задание, для которого требуется больший объем памяти, не используется.

GRADLE_OPTS="-Dorg.gradle.jvmargs=-Xms1024M -Xmx8192M -XX:PermSize=512M -XX:MaxPermSize=2048 -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8"

JAVA_OPTS="-XX:MaxPermSize=2048M"
person Sandy    schedule 15.04.2020

defaultConfig {
    multiDexEnabled =true
}

добавьте это в свой файл build.gradle приложения

person FAHAD HAMMAD ALOTAIBI    schedule 30.08.2016
comment
объясните ответ, чтобы другие могли его понять, а не только вопрос, заданный парнем. - person Kaleem Ullah; 30.08.2016
comment
Я уже включил multidex, как я написал в своем вопросе, у меня включен multidex в моем gradle ... - person bendaf; 30.08.2016