Taille de segment de mémoire Android sur différents téléphones / périphériques et versions de système d’exploitation

Est-ce que quelqu’un sait si la taille du tas sur les téléphones Android est une valeur constante en fonction de ce qui est défini dans la version du système d’exploitation ou s’il s’agit d’un paramètre que les producteurs de téléphones peuvent choisir?

La taille du segment de mémoire est-elle proportionnelle à la quantité de mémoire RAM sur le téléphone?

J’ai seulement trouvé des articles où les gens disent que la taille de tas d’une application est de 16M. Cependant, ces articles sont un peu vieux. D’après ce que je vois, par exemple, les tailles de tas varient d’environ 20 M à 24 M sur un modèle spécifique. Ce téléphone a 768M de RAM.

Est-ce que quelqu’un sait si la taille du tas sur les téléphones Android est une valeur constante en fonction de ce qui est défini dans la version du système d’exploitation ou s’il s’agit d’un paramètre que les producteurs de téléphones peuvent choisir?

Techniquement, c’est un cadre sur lequel les producteurs de téléphones peuvent décider. Android est open source. Je ne me souviens pas du document de définition de compatibilité précisant les exigences relatives à la taille du tas, même si je ne me suis pas penché récemment.

La taille du segment de mémoire est-elle proportionnelle à la quantité de mémoire RAM sur le téléphone?

Non, cela a tendance à être davantage basé sur la résolution de l’écran, car les écrans de plus haute résolution ont tendance à vouloir manipuler des bitmaps plus volumineux.

J’ai seulement trouvé des articles où les gens disent que la taille de tas d’une application est de 16M.

La recherche de StackOverflow sur [android] "heap size" renvoie cette réponse .

Quelques informations supplémentaires sur les périphériques extraites des fichiers build.prop (adb -d pull /system/build.prop):

Téléphones (version Android):

  • HTC Wildfire (2.2.1) = 16 Mo
  • HTC Wildfire S (2.3.5) = 20MB
  • HTC Salsa (2.3.3) = 20MB
  • HTC Desire (2.3.3) = 32 Mo
  • HTC Desire S (2.3.5) = 32 Mo
  • Sprd – Richview – S111 (2.3.5) = 32 Mo
  • Samsung Galaxy S GT-I9000 (2.2) = 48Mo
  • Samsung Galaxy R GT-I9103 (2.3.5) = 64 Mo
  • Samsung Galaxy Y GT-S5360 (2.3.5) = 64 Mo
  • Samsung Galaxy Note N7000 (4.1.2) = taille du tas = 8 m, limite de tas = 64 m, taille supérieure = 256 m
  • Samsung Galaxy S3 GT-I9300 (4.3, xhpdi) = 8/64 / 256Mo
  • Samsung Galaxy S4 GT-I9505 (4,4, xxhpdi) = 8/128/512 Mo
  • Google Galaxy Nexus (4.3) = 8/96 / 256Mo
  • Google Nexus 4 (4.4, xhdpi) = 8/192/512 Mo
  • Google Nexus 5 (4.4, xxhdpi) = 8/192/512 Mo
  • Samsung Galaxy S6 SM-G920W8 (7,0) = 8/256/512 Mo

Tablettes (version Android):

  • Samsung Galaxy Tab GT-P1000 (2.2) = 48Mo
  • Samsung Galaxy Tab 8.9 GT-P7300 (3.2) = 5/64 / 288MB
  • Samsung Galaxy Tab 10.1 GT-P7500 (3.2) = 5/64 / 288MB
  • Samsung Galaxy Tab 3 10.1 GT-P5200 (4.2, mdpi) = 8/96 / 256Mo
  • Acer Iconia A500 (3.2.1) = 5/48 / 256Mo
  • Kindle Fire HD 7 “(4.0.3) = 5/48/256 Mo
  • Asus Transformer Prime TF201 (4.1.1) = 5/48 / 256Mo
  • Nexus 10 (4.4.3) 16/192/512 Mo

Non seulement les fabricants de téléphones, mais tous ceux qui créent une version du système d’exploitation Android, peuvent spécifier la taille de segment de mémoire maximale autorisée, en fonction des exigences spécifiques de leurs périphériques. Certaines racines Android, telles que CyanogenMod, permettent même à l’utilisateur de sélectionner la taille du tas comme paramètre.

Vous pouvez détecter la taille de segment de mémoire maximale autorisée à l’aide de la méthode

 Runtime.getRuntime().maxMemory(); 

Des informations supplémentaires sur ce sujet sont disponibles ici .

Si votre application a normalement besoin de plus de 16 Mo de mémoire, une approche suggérée consiste à définir un niveau de version minimum du système d’exploitation dans votre manifeste pour garantir que la grande majorité des utilisateurs téléchargeant votre application auront au moins le montant une façon de dégrader vos fonctionnalités de manière à réduire vos besoins en tas, jusqu’à un niveau de base de 16 Mo, pour le petit nombre d’utilisateurs avec une quantité de segment de mémoire inférieure à votre taille optimale.

Voici quelques chiffres montrant l’association de la RAM du téléphone avec la version du système d’exploitation (basée sur le système d’exploitation actuel et non sur le système d’exploitation). Je crois qu’un téléphone ayant au moins 1 Go de RAM aura presque toujours plus de 16 Mo de mémoire. Notez que les pourcentages indiqués ici correspondent au nombre de modèles de téléphone prenant en charge la mémoire indiquée, et non le nombre total de téléphones utilisés, qui peuvent être très biaisés par rapport à certains modèles. Ces chiffres ont été obtenus en branchant des entrées dans le visionneur de téléphone suivant (qui comprend 1500 modèles de téléphone Android) et ne sont donc que des chiffres approximatifs: http://www.gsmarena.com/search.php3

Pourcentage de modèles de téléphone ayant au moins 1 Go de RAM, par version actuelle du système d’exploitation (et non version au lancement):

 Phones running Percent of models having at least 1GB of RAM Percentage of all models 4.4 and up 100 percent 1.5 4.3 and up 100 percent 2.9 4.2.x and up 74 percent 18.7 4.1.x and up 71 percent 37 4.0 and up 62 percent 60 2.3.x and up 57 percent 71 2.2 and up 44 percent 93 2.1 and up 44 percent 97 ALL OS VERSIONS: 41.5 percent 100 

Vous devriez pouvoir vérifier le max vm heapsize en utilisant:

 getprop dalvik.vm.heapsize 

au terminal Android (connectbot ou shell adb, etc.). Il est possible de remonter en lecture-écriture et de définir également la taille du tas dans le fichier build.prop. (Assurez-vous que la récupération est installée pour que vous puissiez la réinitialiser si vous la rendez accidentellement trop petite, elle ne démarrera pas).

Le “budget VM” qu’une application est autorisée à utiliser varie d’un périphérique à l’autre. Les tablettes permettent généralement un budget plus important que les téléphones.

Voici certaines des tailles de budget de VM que j’ai trouvées pour différents appareils.

  • G1 = 16 Mo
  • Droid = 24 Mo
  • Nexus One = 32 Mo
  • Xoom = 48 Mo
  • GalaxyTab = 64 Mo.

(Note: si vous avez trouvé différemment, faites le moi savoir)

Il existe en fait une mémoire d’application minimale définie qui dépend de la taille et de la densité de l’écran:

Les appareils mobiles ont généralement des ressources système limitées. Les appareils Android peuvent avoir jusqu’à 16 Mo de mémoire disponible pour une seule application. Le document de définition de compatibilité Android (CDD), section 3.7. La compatibilité des machines virtuelles fournit la mémoire minimale requirejse pour diverses tailles et densités d’écran. Les applications doivent être optimisées pour fonctionner sous cette limite de mémoire minimale. Cependant, gardez à l’esprit que de nombreux périphériques sont configurés avec des limites plus élevées.

Cité de: http://developer.android.com/training/displaying-bitmaps/index.html

Mais, comme d’autres l’ont déclaré, chaque fabricant d’appareils décide de la valeur réelle de l’appareil, ce qui peut être supérieur (mais pas plus petit).

Le document de définition de compatibilité (CDD) mentionné, répertoriant les exigences minimales pour chaque version d’android: https://source.android.com/compatibility/cdd.html

Pour la dernière version d’Android, une version HTML est disponible, et nous pouvons y accéder directement à la section de la mémoire d’exécution: https://source.android.com/compatibility/android-cdd.html#3_7_runtime_compatibility

Pour Android 2.3:

Les implémentations de périphériques avec des écrans classés en moyenne ou basse densité DOIVENT configurer Dalvik pour allouer au moins 16 Mo de mémoire à chaque application. Les implémentations de périphériques avec des écrans classés à haute densité ou à très haute densité DOIVENT configurer Dalvik pour allouer au moins 24 Mo de mémoire à chaque application. Notez que les implémentations de périphériques PEUVENT allouer plus de mémoire que ces chiffres.

Pour les versions modernes, il y a plutôt un tableau où il dépend de la densité de l’écran, etc.:

Pour Android 4.2, exemple de ligne de cette table:

petite / normale / grande taille et densité xhdpi: 64 Mo

Pour Android 6, extrayez:

xhdpi petit / normal: 80 Mo

petit / normal xxhdpi: 128 Mo

petit / normal xxxhdpi: 256 Mo

Il existe également un tableau pour les autres versions Android 2.x, 4.x, 5.x et 6 dans ces documents (voir le lien CDD ci-dessus).

Reportez-vous à ce lien google pour trouver facilement des densités d’écran, etc. pour des périphériques spécifiques: https://design.google.com/devices/

Ces données fonctionnent pour moi. Sélectionnez Emulateur Tablet Android TV RAM 1536 Mo VM HEAP 16 Mo de stockage interne 800 Mo Studio -managé 100