Depois de entender o gerenciamento de memória do Android e configurar ferramentas para medir o uso de memória do jogo, a próxima etapa é reduzir e otimizar ativamente. Manter-se dentro dos limites estritos do Android ajuda a evitar que o sistema feche o jogo, impede longos tempos de inicialização e garante que o jogo funcione bem em todos os dispositivos.
Este guia oferece técnicas práticas para reduzir o consumo de memória do jogo, com foco específico na otimização de recursos no nível de ativos, configurações específicas do mecanismo e práticas recomendadas de gerenciamento de memória.
Reduzir a memória no Unity
Devido ao design arquitetônico do Unity, quando os alocadores de blocos nativos e o heap gerenciado são expandidos, o mecanismo tende a reter essas páginas de memória para reutilização em vez de retorná-las imediatamente ao sistema operacional (SO), mesmo depois que os recursos são liberados. Especificamente, o espaço de endereço virtual (memória reservada) permanece reservado durante todo o ciclo de vida do processo, e a memória física (RSS) não é recuperada imediatamente até que vários ciclos de coleta de lixo (GC) e corte tenham ocorrido. Consequentemente, um pico de memória temporário pode fazer com que a memória residente permaneça inflacionada por muito tempo, mesmo depois que o uso real diminui. Esse comportamento aumenta o risco de falhas de falta de memória (OOM) em dispositivos de baixa qualidade e degrada a estabilidade geral do ambiente de execução.
Portanto, a otimização da memória do Unity precisa ser abordada por três pilares principais adaptados a esses comportamentos do mecanismo:
- Controlar o uso da memória ativa para evitar picos de memória.
- Gerenciar formatos de textura e variantes de sombreador para garantir que recursos desnecessários e recursos nativos não sejam instanciados.
- Refatorar estruturas de código de ambiente de execução para eliminar alocações desnecessárias no heap gerenciado para minimizar a frequência de GC e a expansão do heap.
Para mais informações, consulte Otimização de memória do Unity.