Réduire la mémoire

Une fois que vous avez compris la gestion de la mémoire Android et configuré des outils pour mesurer l'utilisation de la mémoire de votre jeu, l'étape suivante consiste à la réduire et à l'optimiser activement. Le respect des limites strictes d'Android permet d'empêcher le système de fermer votre jeu, d'éviter les longs temps de démarrage et de garantir le bon fonctionnement de votre jeu sur tous les appareils.

Ce guide fournit des techniques pratiques pour réduire l'empreinte mémoire de votre jeu, en se concentrant plus particulièrement sur l'optimisation au niveau des assets, les configurations spécifiques au moteur et les bonnes pratiques de gestion de la mémoire.

Réduire la mémoire dans Unity

En raison de la conception architecturale d'Unity, une fois que les allocateurs de blocs natifs et le tas géré se développent, le moteur a tendance à conserver ces pages de mémoire pour les réutiliser plutôt que de les renvoyer immédiatement au système d'exploitation, même après la libération des assets. Plus précisément, l'espace d'adressage virtuel (mémoire réservée) reste réservé pendant toute la durée de vie du processus, et la mémoire physique (RSS) n'est pas récupérée immédiatement tant que plusieurs cycles de récupération de mémoire (GC) et de réduction n'ont pas eu lieu. Par conséquent, un pic de mémoire temporaire peut entraîner une inflation de la mémoire résidente pendant une longue période, même après une baisse de l'utilisation réelle. Ce comportement augmente le risque de plantages dus à une mémoire insuffisante sur les appareils bas de gamme et dégrade la stabilité globale de l'exécution.

Par conséquent, l'optimisation de la mémoire Unity doit être abordée selon trois piliers principaux adaptés à ces comportements du moteur :

  • Contrôlez l'utilisation de la mémoire active pour éviter les pics de mémoire.
  • Gérez les formats de texture et les variantes de shader pour vous assurer que les assets et les ressources natives inutiles ne sont pas instanciés.
  • Refactorisez les structures de code d'exécution pour éliminer les allocations inutiles sur le tas géré afin de réduire la fréquence de récupération de mémoire et l'expansion du tas.

Pour en savoir plus, consultez Optimisation de la mémoire Unity.