Una vez que comprendas la administración de memoria de Android y configures las herramientas para medir el uso de memoria de tu juego, el siguiente paso es reducirlo y optimizarlo de forma activa. Mantenerse dentro de los límites estrictos de Android ayuda a evitar que el sistema cierre el juego, detiene los tiempos de inicio largos y garantiza que el juego se ejecute bien en todos los dispositivos.
En esta guía, se proporcionan técnicas prácticas para reducir el espacio en memoria del juego, con un enfoque específico en la optimización a nivel de recursos, las configuraciones específicas del motor y las prácticas recomendadas de administración de la memoria.
Reduce la memoria en Unity
Debido al diseño arquitectónico de Unity, una vez que se expanden los asignadores de bloques nativos y el montón administrado, el motor tiende a conservar esas páginas de memoria para su reutilización en lugar de devolverlas de inmediato al sistema operativo (SO), incluso después de que se liberan los recursos. En particular, el espacio de direcciones virtuales (memoria reservada) permanece reservado durante la vida útil del proceso, y la memoria física (RSS) no se recupera de inmediato hasta que se producen varios ciclos de recolección de elementos no utilizados (GC) y de reducción. En consecuencia, un pico de memoria temporal puede hacer que la memoria residente permanezca inflada durante un tiempo prolongado, incluso después de que disminuya el uso real. Este comportamiento aumenta el riesgo de fallas por falta de memoria (OOM) en dispositivos de gama baja y degrada la estabilidad general del tiempo de ejecución.
Por lo tanto, la optimización de la memoria de Unity debe abordarse a través de tres pilares principales adaptados a estos comportamientos del motor:
- Controla el uso de memoria activa para evitar picos de memoria en primer lugar.
- Administra los formatos de textura y las variantes de sombreador para garantizar que no se creen instancias de recursos innecesarios y recursos nativos.
- Refactoriza las estructuras de código de tiempo de ejecución para eliminar las asignaciones innecesarias en el montón administrado y minimizar la frecuencia de GC y la expansión del montón.
Para obtener más información, consulta Optimización de la memoria de Unity.