언리얼 공식 문서 - Garbage Collection
1. Garbage Collection
1
자세한 내용은 공식 문서를 참고하세요
- 게임 엔진에서 가장 중요한 작업 중 하나는 메모리 관리이며 언리얼 엔진4의 접근 방식은
Garbage Collection
을 수행하는 것이다.- 엔진은
더 이상 필요없는 객체
를 자동으로 삭제한다.더 이상 필요없는 객체
란?: 더 이상 다른 객체에 의해 참조되지 않음
- 엔진은
언리얼 엔진은
Mark & Sweep
단계를 사용하여 메모리 관리를 진행한다.- 언리얼은 GC를 수행하기 위해
리플렉션 시스템
을 사용- 엔진이 객체와 속성들을 알고 있고 그러기에 더 이상 사용되지 않아 삭제되어도 좋은 객체들을 구분할 수 있기 때문
- 구분하기 위해
레퍼런스 그래프
를 만들어 확인한다.
Reference Graph(레퍼런스 그래프)
(Mark & Sweep
방식)
- 그래프의 루트에는 “Root Set“이라 지정된 오브젝트 세트가 존재
- “Root Set“에 포함된 객체는 GC 대상에서 제외된다.
- 어떤 언리얼 오브젝트도 UObjectBaseUtility::AddToRoot 함수를 통해 “Root Set“에 추가할 수 있다.
(Ex. UObjectXXX->AddToRoot()) ***
- 가비지 콜렉션이 실행되면 엔진은 “Root Set“부터 시작해 알려진 UObject 레퍼런스 트리를 검색하여 참조된 오브젝트를 전부 추적한다.
- 참조되지 않은 객체(= 트리 검색에서 찾지 못한 객체)들은 더 이상 필요하지 않은 오브젝트라 판단하고 제거할 수 있다.
- 참조되지 않은 객체(= 트리 검색에서 찾지 못한 객체)들은 더 이상 필요하지 않은 오브젝트라 판단하고 제거할 수 있다.
엔진에서 자동으로 메모리 관리를 하는 것이기 때문에 “규칙” 을 지켜줘야 제대로 작동하게 된다.