C# 가비지 컬렉션: 메모리 관리의 핵심 - 하로스튜디오 (harostudio.co.kr)
1.1 가비지 컬렉션이란
가비지 콜렉션은 메모리의 할당 및 해제를 관리합니다.
객체를 할당 할 메모리가 충분하지 않은 경우 GC (가비지 수집기)는 가비지 메모리를 수집하고 처리하여 새 할당에 사용할 수있는 메모리를 가져와야합니다. 이 프로세스를 가비지 수집이라고 합니다.
GC는 힙 메모리에 메모리를 할당합니다. 가비지 컬렉터는 메모리 관리를 자동으로 처리하므로 메모리 누수 및 기타 문제의 위험을 줄이는 데 도움이 될 수 있습니다.
1.2 가비지 컬렉션의 역할
가비지 컬렉션은 프로그램이 사용하지 않는 메모리를 자동으로 해제하는 프로세스입니다. 이를 통해 메모리 누수를 방지하고 시스템의 안정성을 유지합니다.
1.3 가비지 컬렉션의 작동 원리
가비지 컬렉션은 프로그램이 생성한 객체 중에서 더 이상 필요하지 않은 객체를 식별하고 삭제합니다. 이를 위해 .NET 런타임은 객체의 수명을 추적하고, 더 이상 참조되지 않는 객체를 해제합니다.
이 과정에서 다음과 같은 방식으로 메모리가 관리됩니다.
AMM(Automatic Memory Management)은 힙 메모리에서 수행됩니다.
힙 메모리는 3세대(generations)로 나뉩니다.
(0세대 : 새로만든 모든 개체 (ex) 임시 변수와 같은 모든 단기개체)
0세대에 메모리가 충분하지 않으면 0세대가 1세대로 옮겨짐
/1세대 : 가비지 수집에서 해제되지 않은 일부 0세대 개체가 차지하는 공간이 실행되면 1세대로 이동됨
수명이 짧은 개체와 긴 개체 사이의 버퍼 역할을 함.
/ 2세대: 정적 개체와 같은 가장 오래 살았던 개체가 포함됨)
메모리 크기 2세대 > 1세대 > 0세대
가비지컬렉터가 잘 동작하려면 메모리 관리를 효율적으로 해주어야 함
주의점: 가비지 수집기는 지속적으로 생성 및 소멸되어야 하는 수명이 짧은 개체가 많은 경우와 같은 특정 시나리오에서 성능 문제를 일으킬 수 있습니다. 이를 "가비지 수집 오버헤드"라고 하며 응용 프로그램이 느려지거나 응답하지 않을 수 있습니다.
'CS > C# & Unity' 카테고리의 다른 글
C#의 this (0) | 2023.12.12 |
---|---|
C#의 string (0) | 2023.12.12 |
const와 readonly의 차이 (+ static) (1) | 2023.12.12 |
직렬화와 역직렬화 (1) | 2023.12.12 |
스태틱 게임오브젝트와 배칭 (0) | 2023.10.01 |