web-dev-qa-db-fra.com

exécution instantanée Java.lang.OutOfMemoryError: dépassement de la limite de surcharge du GC

J'ai mis à niveau vers Android Studio 2.1 et j'ai eu cette erreur pendant que j'essaie de créer et d'exécuter mon grand projet d'entreprise:

L'exécution a échoué pour la tâche ': app: transformClassesWithDexForMyAppDebug'. com.Android.build.api.transform.TransformException: com.Android.ide.common.process.ProcessException: Java.util.concurrent.ExecutionException: Java.lang.OutOfMemoryError: limite de surcharge du GC dépassée

J'ai cherché sur le forum et désactivé l'exécution instantanée, écrivez également à mon build.gradle:

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

Mais cela n'a pas résolu mon problème. J'ai multidex activé dans mon gradle, car je reçois l'erreur sans cela:

com.Android.dex.DexIndexOverflowException: l'ID de méthode n'est pas dans [0, 0xffff]: 65536

c'était donc la solution, et cela fonctionnait auparavant avec les versions précédentes de Android Studio (fonctionnant également pour les autres de l'entreprise, qui utilisent Android = Studio 1.4-2.0) mais pas pour moi depuis que j'ai mis à jour mon Android Studio.

Quelqu'un at-il une idée de ce qui peut causer le problème?

Ce qui est également intéressant, c'est que si je fais juste le projet, je ne reçois pas l'erreur, seulement si j'essaye de le lancer. Toute idée est appréciée!

EDIT 1:

Ce qui est également intéressant, c'est que si je redémarre mon Android studio, alors la première manche est réussie, mais pas la seconde.

EDIT 2:

Si je règle la taille du tas sur une valeur supérieure (comme 8-10 g), l'application ne compile même pas lors de la première exécution.

EDIT 3:

Il semble que le problème soit avec exécution instantanée, si je force Android studio à ne pas l'utiliser (comme le déploiement sur deux appareils à la fois ou la modification de gradle.properties comme dans la réponse) l'erreur disparaît.

15
bendaf

Ajoutez ceci à votre gradle.properties fichier.

# 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

Trouvé ici

Et sur mon build.gradle:

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

....
27
Aspicas

Étape 1: Modifier build.grade

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

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

Étape 2: définition de la classe d'application

public class MyApplication extends Application {

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

}

Étape 3: modifier le grade.properties

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

Ça va marcher!. Merci.

3
sonnv1368

Une autre méthode pour définir la taille du segment de mémoire pour des travaux particuliers consiste à utiliser des variables d'environnement pour chaque travail. Cela garantit que la mémoire est disponible lorsque le travail qui nécessite une mémoire supérieure n'est pas utilisé.

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"
0
Sandy