Unity에서 사용하는 .NET 런타임은 세대별 가비지 컬렉션(Generational Garbage Collection) 메커니즘을 사용하여 메모리 관리를 수행합니다. 이 메커니즘은 객체들을 생성된 시간에 따라 여러 "세대"(Generation)로 분류하고, 각 세대별로 가비지 컬렉션을 실행함으로써 효율적으로 메모리를 관리합니다. 세대별 가비지 컬렉션은 특히 오래 살아남은 객체와 짧게 사용되고 빠르게 버려지는 객체를 구분하여 관리함으로써, 가비지 컬렉션의 전체 실행 시간을 최소화하는 데 도움을 줍니다.
세대별 가비지 컬렉션의 작동 원리
세대별 가비지 컬렉션은 객체를 세 가지 주요 세대로 분류합니다:
- 세대 0 (Generation 0): 가장 최근에 생성된 객체들이 속하는 세대입니다. 이 세대의 객체들은 짧은 시간 동안만 사용되고 빠르게 가비지(불필요한 객체)가 될 가능성이 높습니다. 세대 0의 가비지 컬렉션은 가장 자주 실행되며, 실행 시간도 가장 짧습니다.
- 세대 1 (Generation 1): 세대 0의 가비지 컬렉션 과정에서 살아남은 객체들이 이동하는 세대입니다. 이 세대는 세대 0보다는 덜 자주 컬렉션되며, 객체들은 세대 0보다는 더 오래 살아남은 것으로 간주됩니다.
- 세대 2 (Generation 2): 세대 1의 가비지 컬렉션 과정을 살아남은 객체들이 이동하는 최종 세대입니다. 이 세대에 속하는 객체들은 애플리케이션의 생명주기 동안 계속해서 사용될 가능성이 높으며, 세대 2의 가비지 컬렉션은 가장 덜 자주 실행됩니다.
세대별 가비지 컬렉션의 이점
- 효율성: 짧게 사용되는 객체들이 대부분인 세대 0을 자주 컬렉션함으로써, 메모리를 빠르게 회수할 수 있습니다. 이는 가비지 컬렉션의 전체적인 부하를 줄이고 애플리케이션의 성능을 향상시킵니다.
- 성능 최적화: 오래 살아남은 객체들은 더 적게 검사됩니다. 이는 가비지 컬렉션 과정에서의 CPU 사용량을 줄이고, 애플리케이션의 반응성을 유지하는 데 도움이 됩니다.
Unity 개발자로서 세대별 가비지 컬렉션을 염두에 두고 개발할 때, 불필요한 메모리 할당을 피하고, 객체의 재사용을 고려하는 것이 좋습니다. 예를 들어, 객체 풀(Object Pooling)을 사용하여 자주 생성되고 파괴되는 객체들(예: 게임에서의 총알, 파티클 시스템 등)의 메모리 할당과 해제를 최소화할 수 있습니다. 이러한 접근 방식은 가비지 컬렉션의 부하를 줄이고, 게임의 프레임 레이트를 보다 일관되게 유지하는 데 도움이 됩니다.
scripted by GPT-4
'Unity Engine' 카테고리의 다른 글
Unity URP) URP Sample로 기능 살펴보기 (2) | 2024.03.23 |
---|