C# - GC(가비지 컬렉션)

게임 개발 사전/C#|2019. 7. 13. 00:53

© gary_at_unsplash, 출처 Unsplash

자바나 C#의 경우 C, C++와 크게 다른 점을 꼽으라면 GC의 여부인 것 같다.

간단하게 말해서 메모리를 자동관리해주는 기능인데

이게 어떻게 보면 마냥 좋은 점인 것 같지만,

게임과 같이 성능이 민감한 환경에서는 조금 문제가 될 수 있다.

기본적으로 GC를 너무 의지하다 보면 메모리에 대한 고려를 하지 않는 설계를 하게 되는데

이는 나중에 엄청난 재앙을 초래한다.

아주 간단하게 GC의 작동원리를 풀어보면

어떤 쓰레기장에 담당자 아저씨가 계신다.

이 아저씨는 쓰레기장에 쓰레기가 가득 차는 지 수시로 확인하고 계시고

쓰레기장이 가득 차면 한 번에 치워버린다.

이게 가비지 컬렉션이다.

그리고 이 아저씨를 가비지 컬렉터라고 부른다.

문제는 치우기만 하면 상관없는데 아무리 30년 만기 근속 능력자 아저씨라도

치우는데 어느 정도 힘과 시간이 걸린다.

치우는 도중에는 쓰레기를 채울 수 없다.

쓰레기를 치울 땐 주변의 모든 작업도 멈춘다.

이게 게임 중이라고 가정한다면

한 프레임 이상을 멈춘 상태로 지나간다는 말이다.

그럼 어떤 해결 방법이 있을까?

몇 가지 떠오른 건 쓰레기가 넘쳐도 아저씨한테 일하지 말라고 하는 것과

쓰레기 자체를 안 넣는 것이 있을 것이다.

한눈에 봐도 후자가 더 젠틀하지 않을까?

그래서 아무리 C#에서 GC가 메모리를 관리해준다 해도.

결국은 메모리가 어떻게 쌓이는지 알아야 한다는 것이다.

C나 C++의 포인터 개념만큼은 꼭 배우도록 하자.

'게임 개발 사전 > C#' 카테고리의 다른 글

C# - 소멸자 "~" 틸드(Tilde) 기호  (0) 2019.07.13
C# - 자료형  (0) 2019.07.13
C# - Break, Return 차이  (0) 2019.07.13
C# - 람다식과 익명 함수(Anonymous functions)  (0) 2019.07.13
C# - Delegate,Action,func  (0) 2019.07.13

댓글()