Cuanto más tiempo lleva encendido, más memoria usa: el juego va cada vez más lento y al final se cierra a la fuerza.
Por qué Al ir y venir entre zonas no se liberan texturas, elementos de UI ni efectos → Efecto El GC se ejecuta más a menudo, falta memoria en el SO y empieza el swap → En pantalla Tras unas horas de juego, los tirones aumentan poco a poco hasta un cierre forzado (que el jugador percibe como una desconexión)
Responsable principal Desarrollo de cliente (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Medir el uso de memoria en cada cambio de zona, localizar y corregir las texturas, la UI y los efectos que no se liberan, hacer pruebas automáticas de larga duración (soak tests).
En el gráfico
Subida gradual · Memoria del proceso del juego
Dónde mirar
Registrar durante varias horas Process(juego)\Private Bytes con el Monitor de rendimiento. En dispositivos móviles, el motivo de cierre en ApplicationExitInfo de Android (REASON_LOW_MEMORY) y los informes de jetsam de iOS
Se confirma si
La memoria sube cada vez que se cambia de zona y no vuelve a bajar, y cuanto más tiempo lleva encendido, más tirones y cierres forzados hay
Se descarta si
Si la memoria se mantiene estable y solo hay temblores que empeoran con el tiempo encendido: “Pérdida de precisión del tiempo en float”
Se verifica con
En el entorno del jugador
Para saber más
Los teléfonos aguantan sobre todo comprimiendo la memoria. Si aun así falta, el SO cierra el juego en el acto (para el jugador, el juego se cerró solo). Cuanta menos RAM tiene el dispositivo, antes ocurre.
Fuentes
Memory allocation among processesAndroid (Google) Android aguanta comprimiendo la memoria en zRAM; si no basta, el low memory killer termina procesos, y si se cierra la app en primer plano parece un crash
Identifying high-memory use with jetsam event reportsApple iOS cierra a la fuerza las apps (jetsam) si la presión de memoria no se alivia, y toda app que supera su límite de memoria pasa a ser candidata al cierre
ApplicationExitInfoAndroid (Google) REASON_LOW_MEMORY: el low memory killer del sistema terminó el proceso de la app (los dispositivos que no lo admiten lo reportan como REASON_SIGNALED con SIGKILL)