Unity 점진적 가비지 컬렉션 가이드
개요
Unity에서 메모리 관리는 매우 중요합니다. 점진적 가비지 컬렉션(Incremental Garbage Collection)은 기본적으로 가비지 컬렉션을 여러 프레임에 나누어 수행하여 성능 스파이크를 줄이는 기능입니다.
점진적 가비지 컬렉션의 이점
- 성능 안정성: 작업량을 여러 프레임에 분산하여 GC 관련 성능 스파이크를 줄입니다.
- 프레임 속도 유지: 각 프레임의 짧은 시간 조각을 사용하여 일관된 프레임 속도를 유지합니다.
설정 방법
- Unity 에디터에서
Edit > Project Settings > Player
경로로 이동합니다. Other Settings > Configuration > Use Incremental GC
를 활성화합니다.
기본 사항
- Unity는 Boehm–Demers–Weiser 가비지 컬렉터를 사용합니다.
- 점진적 모드에서는 가비지 컬렉턴이 메인 CPU 스레드를 불필요하게 중단하지 않고 실행됩니다.
점진적 가비지 컬렉션의 예
점진적 GC 활성화
- 프로파일러의 작업을 여러 프레임에 분산.
- 일관된 60fps를 유지.
점진적 GC 비활성화
- GC 스파이크 발생.
- 애플리케이션의 성능 저하.
GC 스파이크의 문제
가비지 컬렉터가 작업을 수행할 때 애플리케이션의 실행이 중단되기 때문에 실시간 애플리케이션에서 문제를 야기할 수 있습니다. 이로 인해 게임의 흐름이 끊기고 사용자 경험이 저하됩니다.
VSync와 타겟 프레임 속도 조정
- VSync 또는
Application.targetFrameRate
를 사용하는 경우, Unity는 잔여 시간에 따라 GC에 할당할 시간을 조정합니다.
Scripting.GarbageCollector 클래스 사용
- 점진적 가비지 컬렉션을 더욱 정밀하게 제어할 수 있습니다.
- 사용자가 직접 남은 시간을 계산하여 GC에 제공할 수 있습니다.
점진적 가비지 컬렉션 비활성화
- 플레이어 설정 창에서
Use Incremental GC
를 비활성화합니다. - GC 스파이크가 잦은 경우, 비활성화하여 성능을 개선할 수 있습니다.
마킹 단계와 레퍼런스
레퍼런스가 자주 변경되면 가비지 컬렉터가 다시 스캔해야 하기 때문에 성능에 영향을 줄 수 있습니다. 삭제해선 안 되는 오버헤드가 발생할 수 있습니다.
결론
대부분의 Unity 프로젝트는 점진적 가비지 컬렉션을 통해 성능을 개선할 수 있으며, 프로파일러를 통해 언제나 성능을 모니터링해야 합니다.
참고 자료
제목 | 링크 |
---|---|
Unity 공식 문서 | docs.unity3d.com |
프로파일러 사용법 | Profiler in Unity |
메모리 관리 | Memory Management in Unity |
이 문서는 Unity의 가비지 컬렉션에 대한 기본 개념을 소개하고 점진적 가비지 컬렉션의 이점을 설명합니다. 더 안전하고 효율적인 게임 개발을 위해 이 기능을 적절히 활용하시기 바랍니다.