게임개발/스터디

[스터디] GC란?

감물 2024. 5. 12. 18:49

유니티의 가비지 컬렉터(Garbage Collector, GC)는 유니티 엔진에서 사용되는 메모리 관리 시스템의 한 부분으로, 사용되지 않는 메모리(즉, 가비지)를 자동으로 찾아서 회수하는 역할을 수행한다. 이 시스템은 유니티가 사용하는 .Net 프레임 워크의 중요한 구성 요소이다. 가비지 컬렉터의 주 목적은 메모리 누수를 방지하고 애플리케이션의 메모리 효율성을 유지하는 것이다.

 

 

* 가비지 컬렉터의 작동 원리

유니티에서의 가비지 컬렉션은 자동으로 진행된다. 즉, 프로그래머가 직접 메모리를 관리할 필요가 없다. 가비지 컬렉터는 다음과 같은 단계로 작동한다.

 

1. 마킹(Marking) : 가비지 컬렉터는 현재 활성화되어 사용 중인 객체를 확인하고 "마크"한다. 이 과정에서 프로그램에 의해 여전히 참조되고 있는 모든 객체가 식별된다.

 

2. 청소(Sweeping) : 마킹 과정에서 참조되지 않은, 즉 가비지로 판단된 객체들을 메모리에서 제거한다. 이렇게 해서 해제된 메모리는 애플리케이션에서 다시 사용할 수 있게 된다.

 

3. 압축(Compacting) : (필요한 경우) 메모리 내의 객체들을 재배치하여 메모리 단편화를 줄이고, 메모리 사용 효율을 개선한다.

 

 

* 가비지 컬렉션의 영향

가비지 컬렉션이 유용한 메모리 관리 도구이긴 하지만, 그 실행 시점과 실행 시간은 때때로 게임의 성능에 부정적인 영향을 줄 수 있다. 특히 가비지 컬렉션이 발생할 때는 약간의 시간 동안 게임이 멈추는 "프리징" 현상이 발생할 수 있다. 이러한 현상은 다음과 같은 경우에 더욱 두드러질 수 있다.

 

- 대량의 메모리 할당과 해제가 빈번히 일어날 때

- 큰 객체나 많은 수의 작은 객체가 짧은 시간 안에 생성될 때

 

 

* 최적화 전략

- 객체 풀링(Object Pooling) : 자주 사용되는 객체를 미리 생성해 두고 필요할 때 재사용한다. 이 방법은 객체 생성과 파괴로 인한 가비지를 줄여 준다.

- 적은 메모리 할당 : 게임의 메인 루프나 자주 호출되는 함수에서의 메모리 할당을 최소화한다.

- 불필요한 메모리 할당 제거 : 문자열 연산이나 리스트 조작과 같이 불필요하게 메모리 할당을 많이 요구하는 코드를 최적화한다.

 

 

가비지 컬렉션은 유니티 개발에 있어서 중요한 요소이며, 효과적인 메모리 관리를 통해 게임의 성능을 유지하고 사용자 경험을 개선하는 데 큰 역할을 한다. 따라서, 가비지 컬렉션의 작동 원리를 이해하고, 그 영향을 최소화하는 최적화 전략을 적용하는 것이 중요하다.