게임개발 캠프 16일차

IIRU·어제

[ C# GC (가비지컬렉션) ]

메모리 관리를 자동으로 해주는 기능입니다.
사용중이던 객체나 작업이 종료되면 자동으로 찾아서 메모리를 해제하는 역할을 합니다.

1. 마킹(Marking)

모든 접근 가능한 오브젝트를 마킹합니다.

2. 스위핑(Sweeping)

마킹되지 않은 객체들을 힙에서 제거하여 메모리를 회수합니다.

3. 컴펙션(Compaction)

남아있는 객체들을 힙의 시작부분으로 이동시켜 메모리 파편화를 줄입니다.

C#에서 가비지 컬렉션은 세대 기반으로 동작합니다.

0세대는 가장 최근 할당된 객체들이 있습니다.
1세대는 0세대에서 살아남은 객체들이 있는 공간입니다.
2세대는 1세대에서 살아남은 객체들이 있는 공간입니다.
LOH(Large Object Heap)에는 크기가 큰 객체가 바로 할당됩니다.

세대별로 내려가면서 GC가 작동하게 된다.
하지만 GC는 연산량이 크기 때문에 많이 작동하게 되면 성능에 문제가 있을 수 있다.

[ 가비지 컬렉션을 줄이는 방법 ]

1. 객체 재사용

자주 생성되거나 사라지는 객체를 줄인다.

2. 구조체를 사용

값타입을 사용하여 힙 할당을 줄인다.

3. 불필요한 할당피하기

임시 객체의 생성을 최소화하고, 필요한 경우 메모리를 명시적으로 해제합니다.

4. 큰 객체 관리

LOH에 할당되는 큰 객체 사용을 최소화한다.

5. 최적화된 코드 작성

코드 성능을 최적화 하여 메모리 사용을 줄여야한다.

[ 유니티의 GC ]

유니티는 옛날 버전의 GC를 사용중이다.
유니티에서의 GC는 마크와 스위핑만 존재한다.
그렇기 때문에 최적화가 반드시 필요하다.
가비지 컬렉션을 줄이는 방법을 제대로 알아두길 바란다.

(공부 출처)
1. https://unity-programming-study.tistory.com/33
2. https://autumncat.tistory.com/88

profile
초보 개발자 블로그입니다!

0개의 댓글