📝 GC(가비지 콜렉터)란?
- C# 과 JAVA 에서는 닷넷 프레임워크가 제공하는 자동 메모리 관리 GC를 이용한다.
- 그와 반대로 C/C++ 에서는 프로그래머가 직접 메모리를 관리 해주어야 하기 때문에 Memory Leak이 쉽게 일어난다.
- GC는 특정 조건을 만족하는 상황이 되면 쓰레드들을 모두 중단시키고 GC 쓰레드를 실행시킨다.
- 조건으로는 크게 3가지가 있다.
- 객체를 할당하여 할당하는 임계치가 넘어갈 때(각 세대 별)
- 시스템의 메모리가 부족할 때
- System.GC.Collect 메서드를 호출할 때
📝 System.GC.Collect 메서드란?
- MS 다큐먼트 설명에는 모든 세대의 가비지 컬렉션을 즉시 수행한다고 나와있음.
- https://learn.microsoft.com/ko-kr/dotnet/api/system.gc.collect?view=net-7.0
📝 GC Generation(세대)란?
🌟 GC Root(루트)
- 오브젝트를 선언할 때 오브젝트는 힙에 할당 되지만 오브젝트를 가리키는 참조 값이 스택에 저장된다.
- 이때 힙에 있는 객체를 가르키는 참조를 GC Root라고 부른다.
- GC는 루트 목록을 순회하며 루트가 참조하는 힙 객체와 관계를 조사한다.
- 어떤 힙과도 루트와 관계가 없다면 필요 없는 가비지로 판단.
- 다른 힙 객체를 참조하고 있다면 가비지로 수집하지 않는다.
🌟 GC Generation(세대)
- GC는 세대별로 구분할 수 있는데, 힙 상의 객체를 객체의 생존 시간에 따라 0,1,2로 구분한다.
- 세대가 낮을수록 메모리에서 먼저 GC에게 수집 당한다.
- 세대별 특징으로
- 0세대는 최근에 생성된 객체
- 1세대는 1회의 GC동안 살아남은 객체
- 2세대는 2회 이상의 GC동안 살아남은 객체
- 기본적으로 GC는 0세대를 집중적으로 처리한다.
- GC는 0세대가 사용할 수 있는 메모리가 줄어들어 특정 한계점에 도달하게 되면 1세대를 처리한다
- 이때 0세대에서 살아남은 객체는 1세대로, 1세대에서 살아남은 객체는 2세대로 분류된다.
📒 참고 문서
https://luv-n-interest.tistory.com/922
https://m.blog.naver.com/hjleesm/221728801943
https://chipmunk-plump-plump.tistory.com/339
'Unity' 카테고리의 다른 글
[Attribute] RequireComponent (1) | 2024.03.16 |
---|---|
for 문으로 AddListener 이벤트를 등록 시 주의할 점. Closure(클로저) (0) | 2024.02.12 |
SQL Server 설치 및 예제 파일 적용 방법 (0) | 2024.02.12 |
JavaScript에서 Unity 함수 호출(종료 시점) (0) | 2024.01.14 |
Unity에서 JavaScript 함수 호출 (0) | 2024.01.14 |