L'Android developer documentation, dans le cadre du Projet Svelte (devise: "jamais Vous essayez de montage Bugdroid dans des jeans skinny?!?"), a une page sur la Gestion de la Mémoire de Votre Application. Il contient:
Lorsque l'utilisateur accède à une autre application et votre INTERFACE utilisateur n'est plus visible, vous devez libérer les ressources qui sont utilisées par seulement votre INTERFACE utilisateur. En libérant de l'INTERFACE utilisateur de ressources à ce moment peut augmenter de manière significative la capacité du système pour les processus mis en cache, ce qui a un impact direct sur la qualité de l'expérience utilisateur.
et:
TRIM_MEMORY_RUNNING_LOW
: Votre application est en cours d'exécution et non pas tuables, mais l'appareil est en cours d'exécution beaucoup plus faible sur la mémoire de sorte que vous devez libérer des ressources non utilisées pour améliorer les performances du système (qui impacte directement les performances de votre application).
et la comme.
Cependant, ces n'a de sens que si "la libération de ressources" serait effectivement affecter la mémoire vive du système en quelque sorte.
J'étais sous l'impression que le Dalvik VM s'est comporté comme la machine virtuelle Java (ou peut-être "a", si ils ont changé quand je n'étais pas à la recherche). Autant que je sache, la machine virtuelle Java alloue de la mémoire vive du système pour augmenter la taille du tas, mais ne les commercialise pas, une fois attribué, il reste une partie de la mémoire système pour aussi longtemps que le processus s'exécute.
Si le Dalvik VM se comporte de la même façon, alors je ne vois pas comment l'augmentation de la quantité de non alloué de la mémoire dans notre processus aurait aucun impact sur les performances globales du système. Maintenant, pour libérer de la mémoire pour notre processus est une bonne chose, et peut-être que cela permettrait de diminuer le risque de nous avoir besoin de plus de RAM dans le futur... mais ce n'est pas ce que la documentation implique. La documentation indique "la libération de l'INTERFACE utilisateur de ressources à ce moment peut augmenter de manière significative la capacité du système pour les processus mis en cache"; il ne dit pas "la libération de l'INTERFACE utilisateur de ressources à ce moment n'a pas d'impact immédiat, mais permettra de réduire votre application du système de la mémoire RAM de l'empreinte dans le futur".
Maintenant, si les instructions nous a dit de nous libérer de la mémoire allouée par le NDK, qui aurait du sens, comme cela se produit à l'extérieur de la Dalvik tas et aurait une incidence sur le système de mémoire vive. Mais la documentation ne permet pas de faire cette distinction.
Le Dalvik VM en fait la libération de RAM allouée vers le système, autre que par la terminaison du processus? Si oui, quand? Et, dans une moindre mesure, comment est-ce fait, considérant que le garbage collector est non-compactage et non de la copie?
Merci!