Switching to Unreal | Garbage collection in Unity and Unreal Engine
- Unreal Engine은 C++의 수동 메모리 관리 부담을 덜어주는 가비지 컬렉션(GC) 시스템을 제공하며, UObject 클래스를 기반으로 합니다. ♻️
- GC는 '마크 앤 스위프' 단계를 거쳐 메모리를 관리하며, 이 과정에서 'Stop the World' 이벤트가 발생해 성능 저하를 유발할 수 있습니다. ⏱️
- UObject는 new 연산자가 아닌 NewObject 또는 CreateDefaultSubobject 함수를 통해 생성해야 하며, UProperty를 사용하여 참조를 관리해야 합니다. 🔑
- TWeakObjectPtr은 객체가 더 이상 필요 없을 때 GC가 메모리를 회수하도록 돕고, TSoftObjectPtr은 필요할 때만 에셋을 로드하여 메모리 사용량을 최적화합니다. 🧽
- 액터는 Destroy 함수를 사용하여 파괴할 수 있지만, 실제 메모리 해제는 GC가 담당하므로 IsValid 함수를 사용하여 객체의 유효성을 확인해야 합니다. ⚠️
- Unreal Insights와 OBJ LIST 명령어를 사용하여 GC 성능을 프로파일링하고, GC 클러스터링과 Disregard for GC 설정을 통해 성능을 개선할 수 있습니다. 🛠️
- 블루프린트 매크로 대신 함수를 사용하고, C++ 코드로 변환하거나, UObject 대신 일반 C++ 객체를 사용하여 GC 오버헤드를 줄일 수 있습니다. 💡