Mémoire libre d'accumulateur d'ordures Android

Je travaille sur une application qui gère beaucoup d'allocations (de l'ordre de 4 millions de doubles et d'un million de classes). Je regardais à travers les journaux des récupérateurs d'ordures et je vois que différentes quantités de mémoire total sont libérées sur différents périphériques.

Par exemple, j'ai un Moto X (2014) qui finit par libérer un peu plus de 312 Mo. J'ai également un Droid Bionic exécutant le même code sur les mêmes données qui libèrent en moyenne 616 Mo. Les deux appareils finissent avec une taille de tas d'environ 50 Mo.

  • L'exposant privé d'Android KeyStore ne peut pas être extrait
  • Le processus de fond de cache Android augmente de façon continue
  • Pourquoi est-ce que beaucoup plus de mémoire est libérée par le GC sur le Bionic que le Moto X? Ils devraient générer la même quantité de déchets que chacun. Que se passe-t-il dans les coulisses dans le collecteur d'ordures? Le Moto X est sur Android 5.1 et le Bionic est sur 4.1.2.

    Edit: J'ai quatre périphériques qui libèrent environ 300 Mo de RAM: le Moto X (2014), le Nexus 7 2013, le Nexus 7 2012 et le Razr i. Les quatre utilisent ART. Le Bionic exécute l'exécution Dalvik. Est-ce pourquoi il y a moins de libération? J'ai remarqué que GC_FOR_ALLOC n'arrive pas dans ART, mais il se fait appel tout le temps sur Dalvik.

  • Impossible de définir SwipeFlingAdapterView à partir de l'adaptateur réseau
  • Convertir SQLite en JSON
  • Android Comment puis-je lire le fichier json (fichier texte) de la carte SD et afficher les données dans textview
  • Comment postuler JSON entier brut dans le corps d'une demande de rétrofit?
  • Comment mettre à jour ui de Asynctask
  • Envoyer la demande POST avec les données JSON à l'aide de Volley
  • One Solution collect form web for “Mémoire libre d'accumulateur d'ordures Android”

    Citation de cette publication:

    Ensuite, l'équipe ART a travaillé à optimiser le collecteur d'ordures (GC). Au lieu de deux pauses totalisant environ 10 ms pour chaque GC à Dalvik, vous en verrez une seule, habituellement inférieure à 2 ms. Ils ont également parallélisé des parties de la GC et optimisé les stratégies de collecte pour connaître les états de l'appareil. Par exemple, un GC complet ne fonctionnera que lorsque le téléphone est verrouillé et la réactivité de l'interaction de l'utilisateur n'est plus importante. Il s'agit d'une énorme amélioration pour les applications sensibles aux cadres abandonnés.

    Ce que l'auteur dit ici, c'est que les appareils alimentés par ART seront beaucoup plus efficaces dans le contexte de GC – à la fois en ce qui concerne le temps GC "déchets" et la quantité de mémoire libérée au moment de l'exécution.

    Une contribution supplémentaire à l'utilisation de la mémoire inférieure peut être attribuée à ceci (ceci est juste une supposition):

    Dans peut-être l'amélioration la plus importante, ART compile maintenant votre application au code machine natif lorsqu'il est installé sur un périphérique d'utilisateur. Connu sous le nom de compilation à l'avance, vous pouvez vous attendre à des gains de grande performance lorsque les compilateurs sont syntonisés pour des architectures spécifiques (comme ARM, x86 ou MIPS). Cela élimine la nécessité d'une compilation just-in-time chaque fois qu'une application est exécutée. Ainsi, votre application prendra un peu plus de temps à installer, mais démarrera plus rapidement lors du lancement, autant de tâches exécutées au moment de l'exécution sur la VM Dalvik, telles que la vérification des classes et des méthodes, ont déjà eu lieu.

    Comme ART compile votre application à l'avance, le temps de compilation peut être étendu, ce qui permet au compilateur d'effectuer un meilleur travail en optimisant votre code.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.