메모리 줄이기

Android 메모리 관리를 이해하고 게임의 메모리 사용량을 측정하는 도구를 설정했다면 다음 단계는 메모리 사용량을 적극적으로 줄이고 최적화하는 것입니다. Android의 엄격한 제한을 준수하면 시스템에서 게임을 종료하는 것을 방지하고, 긴 시작 시간을 방지하며, 모든 기기에서 게임이 원활하게 실행되도록 할 수 있습니다.

이 가이드에서는 게임의 메모리 사용 공간을 줄이는 실용적인 기법을 제공하며, 특히 애셋 수준 최적화, 엔진별 구성, 메모리 관리 권장사항에 중점을 둡니다.

Unity에서 메모리 줄이기

Unity의 아키텍처 설계로 인해 네이티브 블록 할당자와 관리되는 힙이 확장되면 엔진은 애셋이 출시된 후에도 운영체제 (OS)에 즉시 반환하는 대신 재사용을 위해 이러한 메모리 페이지를 유지하는 경향이 있습니다. 특히 가상 주소 공간 (예약된 메모리)은 프로세스의 수명 동안 예약된 상태로 유지되며, 여러 가비지 컬렉션 (GC) 및 트리밍 주기가 발생할 때까지 실제 메모리 (RSS)는 즉시 회수되지 않습니다. 따라서 일시적인 메모리 피크로 인해 실제 사용량이 감소한 후에도 상주 메모리가 오랫동안 부풀어 있을 수 있습니다. 이러한 동작은 저사양 기기에서 메모리 부족 (OOM) 비정상 종료의 위험을 높이고 전반적인 런타임 안정성을 저하시킵니다.

따라서 Unity 메모리 최적화는 이러한 엔진 동작에 맞게 조정된 세 가지 핵심 원칙을 통해 접근해야 합니다.

  • 활성 메모리 사용량을 제어하여 메모리 피크 스파이크를 사전에 방지합니다.
  • 텍스처 형식과 셰이더 변형을 관리하여 불필요한 애셋과 네이티브 리소스가 인스턴스화되지 않도록 합니다.
  • 런타임 코드 구조를 리팩터링하여 관리되는 힙에서 불필요한 할당을 없애 GC 빈도와 힙 확장을 최소화합니다.

자세한 내용은 Unity 메모리 최적화를 참고하세요.