Language/C#

[.NET] Garbage Collector에 대해

범데이 2023. 7. 20. 18:10

C# .NET에서 메모리 관리는 개발자에게 큰 부담이 될 수 있다. 이러한 부담을 줄이기 위해 C# .NET은 자동 메모리 관리 기능인 Garbage Collector를 제공한다. 이 포스팅에서는 Garbage Collector의 개념과 작동 방식에 대해 알아보고, C#에서 메모리 누수를 방지하는 방법을 정리해보고자 한다.

 

 

Garbage Collector란?

Garbage Collector(GC)는 동적으로 할당된 메모리 중에서 더 이상 사용되지 않는 객체를 감지하고, 이러한 객체들의 메모리를 자동으로 해제하여 시스템 자원을 최적화하는 역할을 한다. 개발자는 메모리 해제를 명시적으로 관리할 필요가 없으며, GC가 대신 처리한다.

 

 

 

Garbage Collector 작동 방식

  • Mark and Sweep 알고리즘: GC는 주기적으로 실행되며, 모든 접근 가능한 객체를 마킹(mark)한다. 그리고 마킹되지 않은 객체들을 garbage으로 간주하여 수거(sweep)한다.
  • Generational Garbage Collection: GC는 객체를 세대별로 관리한다. 새로 생성된 객체는 0세대로 시작하며, 오래 살아남은 객체일수록 세대가 증가한다. 대부분의 객체는 짧은 수명을 가지기 때문에 0세대에서 해제되고, 일정 시간을 초과한 객체들은 상위 세대로 이동한다.

 

 

Garbage Collector 사용 이점

  • 메모리 누수 방지: GC가 메모리 해제를 자동으로 처리하여 개발자가 메모리 관리를 신경 쓰지 않아도 된다.
  • 성능 최적화: 메모리 해제를 효율적으로 처리하여 시스템의 성능을 향상시킨다.
  • 안정성 보장: GC가 더 이상 필요하지 않은 메모리를 해제함으로써 예기치 않은 오류를 방지한다.

 

 

Garbae Collector 주의사항:

  • GC는 일정 시간마다 주기적으로 실행되지만, 정확한 타이밍은 보장되지 않는다. 때문에 실시간 요구가 있는 작업에서는 GC에 영향을 받지 않도록 고려해야 한다.
  • 큰 메모리 할당이 필요한 경우에는 GC의 영향을 최소화하고자 메모리 사용 방식을 고려해야 한다.

 

 

 

이 포스팅을 통해 C# .NET에서 Garbage Collector가 어떻게 작동하며, 메모리 관리에 어떤 이점을 제공하는지 조금은 이해할 수 있을 것이다. 메모리 누수를 피하고 시스템 성능을 향상시키기 위해 GC를 올바르게 활용하는 방법을 잘 알아두어야 한다.

 


#References

https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/

https://www.c-sharpcorner.com/article/C-Sharp-garbage-collection-best-practices/

https://stackify.com/understanding-garbage-collection-in-net/

https://www.red-gate.com/simple-talk/dotnet/net-framework/net-memory-management-a-walk-down-memory-lane/

반응형