Unity

GC : 가비지 콜렉터

JiHxxn 2024. 2. 4. 23:55

📝 GC(가비지 콜렉터)란?

  • C# 과 JAVA 에서는 닷넷 프레임워크가 제공하는 자동 메모리 관리 GC를 이용한다.
  • 그와 반대로 C/C++ 에서는 프로그래머가 직접 메모리를 관리 해주어야 하기 때문에 Memory Leak이 쉽게 일어난다.
  • GC는 특정 조건을 만족하는 상황이 되면 쓰레드들을 모두 중단시키고 GC 쓰레드를 실행시킨다.
    • 조건으로는 크게 3가지가 있다.
    1. 객체를 할당하여 할당하는 임계치가 넘어갈 때(각 세대 별)
    2. 시스템의 메모리가 부족할 때
    3. System.GC.Collect 메서드를 호출할 때

📝 System.GC.Collect 메서드란?

 

GC.Collect 메서드 (System)

가비지 컬렉션을 수행하도록 합니다.

learn.microsoft.com


📝 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

 

C#에서의 GC(Garbage Collector), 가비지 컬렉터

C#에서는 닷넷프레임워크가 제공하는 자동메모리관리를 이용한다. **C/C++에서는 Memory leak가 쉽게 일어남. 닷넷프레임워크에서는 Managed heap 이나 Stack에다 메모리를 할당한다. 아래 그림을 살짝 보

luv-n-interest.tistory.com

https://m.blog.naver.com/hjleesm/221728801943

 

[C#] 가비지 컬렉션 실행하기 System.GC.Collect

Photo by Gary Chan on Unsplash 오늘은 System.GC.Collect 매서드에 대해 알아보도록 하겠습니다....

blog.naver.com

https://chipmunk-plump-plump.tistory.com/339

 

C# GC의 이해 및 메모리 최적화

# GC (가비지 컬렉터 - Garbage Collector) 가비지 컬렉터는 Java나 C#에서 메모리를 자동으로 해제해주는 기능이다.(이하 GC) C#은 C/C++의 메모리 할당보다 빠르다. C/C++처럼 자유 메모리 블록을 검사할 필

chipmunk-plump-plump.tistory.com