비트를 쪼개는 개발자

allen321@naver.com

C#

C# - 가비지 컬렉션(Garbage Collection)

MozarTnT 2024. 6. 7. 18:26
728x90
반응형

 

 

 

 

가비지 컬렉션 이란 ?

 

  • 가비지 컬렉션(Garbage Collection, GC)은 메모리 관리를 자동화하는 기능.

 

  • 더 이상 사용되지 않는 객체를 자동으로 찾아서 메모리를 해제하는 역할을 함.

 

  • 스택 메모리의 경우 함수의 실행 순간부터 종료까지 공간 사용량을 추적한다.

 

  • 하지만 힙 메모리는 C++과 같은 경우에는 메모리 관리가 수동으로 이루어지기 때문에 생성자와 소멸자를 명시적으로 정의해야 함.

 

  • C#은 가비지 컬렉션을 통해 자동으로 메모리를 관리하기 때문에 생성자는 필요하지만, 소멸자는 대부분의 경우 필요하지 않다.

 

 

 

 

 

 

 

가비지 컬렉션의 동작 방식

 

 

  1. 마킹(Marking) : 가비지 컬렉터는 루트 참조부터 시작하여 모든 접근 가능한 객체를 마킹함.
  2. 분류, 재배치 (Relocate) : 사용되지 않는 개체들을 식별하는 작업.
  3. 압축 (Compacting) : 마킹되지 않은 객체를 해제하고, 살아남은 객체를 힙의 앞쪽으로 이동시켜 메모리 단편화를 줄임
  4. 객체 이동 : 살아남은 객체를 이동시키고, 참조를 업데이트함.

 

 

 

 

 

가비지 컬렉션의 동작 순서

 

1.  마킹 (Marking)

 

 

  • 마킹 단계는 사용 중인 객체와 사용되지 않는 객체를 식별하는 과정
  • 초기 단계의 가비지 콜렉터는 일단 모든 객체를 가비지로 가정함
  • 루트 집합(Root Set): 프로그램의 루트에서 시작하여 각 루트에서 참조하고 있는 모든 객체를 탐색함.
  • 도달 가능한 객체(Mark Phase): 모든 객체를 마킹한 후 도달 가능한 객체는 힙에서 살아남으며, 도달할 수 없는 객체는 가비지로 간주됩니다.

 

 

2.  분류, 재배치 (Relocate)

 

  • 루트 목록에서 도달할 수 없는 가비지로 간주한 객체 이외에 살아남은 객체들을 재배치함.
  • 이 작업은 메모리 단편화*를 줄여주는 역할을 함.

 

 

*메모리 단편화 = 메모리 할당과 해제 과정에서 발생하는 현상으로, 사용 가능한 메모리가 여러 개의 작은 조각으로 나뉘어 있는 상태를 말함, 즉 사용 가능한 메모리가 있어도 제대로 할당하지 못하는 상태임

 

 

3. 압축 (Compacting)

 

 

  • 압축 단계는 재배치 후 남아 있는 가비지를 제거하고 힙을 정리하는 과정임.
  • 루트 목록 조사 후 가비지 컬렉터가 힙 메모리를 돌면서 접근 가능한 object들을 메모리 복사를 통해 덮어 씌운다.

 

4. 객체 이동

 

  • 참조 업데이트: 객체가 이동하면 해당 객체를 참조하는 모든 참조가 올바른 새 위치를 가리키도록 업데이트 한다.
  • 힙의 정리: 이동된 객체의 원래 위치는 해제되고, 힙의 연속된 메모리 블록을 확보함.

 

 

 

 

 

요약

 

  • 가비지 컬렉션이 필요한 이유

 

  1. 자동 메모리 관리: 개발자가 수동으로 모든 메모리를 해제하지 않아도 됨. 
  2. 메모리 단편화 방지: 재배치와 압축을 통해 힙의 연속된 메모리 블록을 유지하여 단편화를 방지함.
  3. 프로그램 안정성 향상: 메모리 누수와 잘못된 메모리 참조를 줄여 프로그램의 안정성을 높임.

가비지 컬렉션은 프로그램이 자동으로 메모리를 관리해주는 아주 편리한 도구이다!

 

 

 

사진 출처 : https://www.geeksforgeeks.org/garbage-collection-in-c-sharp-dot-net-framework/?ref=gcse

 

Garbage Collection in C# | .NET Framework - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

728x90
반응형