유니티의 메모리 설명

2024. 10. 21. 23:10카테고리 없음

1. 관리되는 메모리 (Managed Memory)

  • Mono 및 IL2CPP 같은 스크립팅 가상 머신(VM)이 관리하며, C# 코드에서 사용하는 메모리입니다.
  • 관리되는 힙: 자동으로 할당되고 가비지 컬렉터(GC)가 메모리를 해제합니다. 이 때문에 성능에 영향을 줄 수 있으므로, 불필요한 메모리 할당을 줄이는 것이 중요합니다.
  • 스크립팅 스택: 코드가 실행될 때 메모리가 할당되고, 코드가 끝날 때 해제됩니다.
  • 네이티브 VM 메모리: Unity 스크립팅 레이어에 관련된 메모리입니다. 대부분의 경우, 이 메모리를 직접적으로 조작할 필요는 없습니다.

가비지 컬렉터는 편리하지만, 메모리 해제 시점이 예측되지 않기 때문에 성능 저하가 발생할 수 있습니다. 이런 문제를 피하기 위해선 관리되지 않는 메모리를 사용할 수 있습니다.

 

2. C# 관리되지 않는 메모리 (Unmanaged Memory)

  • C# 코드에서 네이티브 메모리 레이어에 접근할 수 있는 방식입니다. 가비지 컬렉터가 관여하지 않아 메모리 관리를 더 세밀하게 조작할 수 있습니다.
  • Unity.Collections 네임스페이스(예: NativeArray)를 사용해 네이티브 메모리와 상호작용할 수 있습니다. 이 방식은 성능 최적화에 유리하며, 특히 잡 시스템이나 버스트 컴파일러를 사용할 때 유용합니다.

 

3. 네이티브 메모리 (Native Memory)

  • Unity 엔진이 내부적으로 사용하는 메모리입니다. 대부분의 경우 직접 조작할 필요는 없지만, 프로젝트, 에셋, 그래픽 API 등의 데이터를 저장하는 메모리입니다.
  • 프로파일러를 사용하면 애플리케이션의 성능에 네이티브 메모리가 어떤 영향을 미치는지 확인할 수 있습니다.

성능 최적화 팁:

  • 가비지 컬렉션을 최소화: 필요하지 않은 메모리 할당을 줄여 가비지 컬렉션(GC) 발생을 줄이세요. 예를 들어, **객체 풀링(Object Pooling)**을 사용하면 메모리 할당 및 해제를 줄일 수 있습니다.
  • NativeArray와 같은 구조체를 사용하여 관리되지 않는 메모리를 활용하면 메모리 관리와 성능을 더 효율적으로 할 수 있습니다.
  • 잡 시스템 버스트 컴파일러를 사용하면 멀티스레딩을 통해 성능을 향상시킬 수 있습니다.