Metaverse/UE5

Garbage Collection

onenewkong 2023. 12. 28. 00:27

사용되지 않는 메모리 리소스를 회수하고 해제하여 프로그램의 메모리 누수를 방지하고 성능을 최적화

관리 대상으로 지정된 객체들은 UObject의 모든 하위 클래스들임

 

참조 카운팅

객체 간의 참조를 추적하기 위해 참조 카운팅을 사용

객체가 다른 객체에 의해 참조되면 해당 객체의 참조 카운트가 증가하고, 참조가 제거되면 감소함

참조 카운트가 0이 되면 해당 객체는 더 이상 필요하지 않으며 가비지 컬렉션의 대상이 됨

 

주기적인 가비지 콜렉션

일정한 주기 또는 메모리 입력이 발생할 때마다 가비지 콜렉션을 수행, 이 과정에서 더 이상 참조되지 않는 객체들이 해제됨

 

루트 객체

가비지 콜렉션은 일반적으로 게임 월드 내에서 시작되며, 게임 월드 내의 루트 객체들을 기반으로 작동

루트 객체는 참조 카운트가 1 이상이어야 하며, 그것들이 참조하는 다른 객체들을 통해 전체 객체 그래프를 찾아감

 

강한 참조와 약한 참조

강한 참조는 객체의 참조 카운트를 증가시키며, 약한 참조는 참조 카운트를 증가시킴

이를 통해 참조 사이클과 메모리 누수를 방지함

 

사용자 정의 가비지 콜렉션

사용자가 직접 가비지 콜렉션을 제어할 수 있는 메커니즘을 제공

사용자 정의 가비지 콜렉션 함수를 구현하여 특정 객체나 리소스의 수명을 관리함

 

Pending Kill

오브젝트가 이미 소멸되었지만 코드에서 여전히 참조될 때 발생하는 오류

이 오류를 해결하기 위해서는 지연 순서를 변경하고 유효성 검사를 수행

 

Mark and Sweep

GC Root: 힙 외부에서 접근할 수 있는 변수나 오브젝트, 가비지 컬렉션의 Root임

Mark: GC Root에서 시작해 이 Root가 참조하는 모든 오브젝트, 또 그 오브젝트들이 참조하는 다른 오브젝트들을 탐색해 내려가며 Mark함

Sweep: Mark가 끝나면 가비지 컬렉터는 힙 내부 전체를 돌면서 Mark되지 않은 메모리들을 해제함

'Metaverse > UE5' 카테고리의 다른 글

RPC  (0) 2024.01.29
Network  (0) 2024.01.29
Animation  (1) 2024.01.25
MyVox - Player Move(1)  (0) 2024.01.25
Reflection  (2) 2023.12.29