STIKA

[05] 가비지 컬렉션, 가비지 컬렉터 본문

프로그래밍/개념정리

[05] 가비지 컬렉션, 가비지 컬렉터

STIKA 2024. 3. 25. 03:50

가비지 컬렉션


메모리를 관리하는 방법 중 하나이며,

프로그래머가 동적으로 할당한 메모리 영역 중 더 이상 쓰이지 않는 영역을 주기적으로 검사하여 삭제하는 기능입니다.

 

+세대


가비지 컬렉터


 

메모리를 할당 후 제대로 해제하지 않으면 
메모리 누수가 일어나기 때문에 해제를 반드시 해줘야한다

C/C++에서는 직접 해제를 해줘야 하지만 C#에서는 가비지 컬렉터가 대신 해제를 해준다

런타임에 힙영역에 메모리가 계속 쌓이다가
어느 시점에서 가비지 컬렉터가 사용하지 않는 메모리 공간을 자동으로 해제하고
재할당이 가능하도록 만들어 준다

가비지 컬렉터도 또 하나의 프로세스여서 CPU와 메모리를 소모하므로
너무 자주 호출되게 하면 안된다


가비지 컬렉터 피하기


메모리 할당 최소화하기

오브젝트 풀 사용하기

가비지 컬렉션 메소드 직접 호출 피하기

종료자, 소멸자 사용을 최소화하기

Dispose 메서드 사용하기

클래스 형식보다 스트럭트 형식 사용하기

추가

메모리 할당 최소화 - 재사용 가능한 객체는 미리 생성하고, 임시 객체의 생성을 최소화하는 방법

오브젝트 풀  - 기존에 생성된 객체를 계속 재사용하는 방법

종료자, 소멸자 사용 최소화 Finalize() 메서드를 사용하면 가비지 컬렉터가 소멸되는 시점을 판단해서 종료자를 호출하여 종료되는 시점을 예측 할 수 없습니다.

Dispose 메서드 사용 - IDisposable 인터페이스를 구현하여 객체 사용후 명시적으로 Dispose 메서드를 호출하면 해당 리소스를 더 빨리 해제할 수 있습니다.

클래스 형식보다 스트럭트 형식 사용하기 힙 메모리 대신에 스택 메모리를 사용하기 때문에 가비지 컬렉션의 대상이 되지 않는다.