STIKA
[05] 가비지 컬렉션, 가비지 컬렉터 본문
가비지 컬렉션
메모리를 관리하는 방법 중 하나이며,
프로그래머가 동적으로 할당한 메모리 영역 중 더 이상 쓰이지 않는 영역을 주기적으로 검사하여 삭제하는 기능입니다.
+세대
가비지 컬렉터
메모리를 할당 후 제대로 해제하지 않으면
메모리 누수가 일어나기 때문에 해제를 반드시 해줘야한다
C/C++에서는 직접 해제를 해줘야 하지만 C#에서는 가비지 컬렉터가 대신 해제를 해준다
런타임에 힙영역에 메모리가 계속 쌓이다가
어느 시점에서 가비지 컬렉터가 사용하지 않는 메모리 공간을 자동으로 해제하고
재할당이 가능하도록 만들어 준다
가비지 컬렉터도 또 하나의 프로세스여서 CPU와 메모리를 소모하므로
너무 자주 호출되게 하면 안된다
가비지 컬렉터 피하기
메모리 할당 최소화하기
오브젝트 풀 사용하기
가비지 컬렉션 메소드 직접 호출 피하기
종료자, 소멸자 사용을 최소화하기
Dispose 메서드 사용하기
클래스 형식보다 스트럭트 형식 사용하기
추가
메모리 할당 최소화 - 재사용 가능한 객체는 미리 생성하고, 임시 객체의 생성을 최소화하는 방법
오브젝트 풀 - 기존에 생성된 객체를 계속 재사용하는 방법
종료자, 소멸자 사용 최소화 Finalize() 메서드를 사용하면 가비지 컬렉터가 소멸되는 시점을 판단해서 종료자를 호출하여 종료되는 시점을 예측 할 수 없습니다.
Dispose 메서드 사용 - IDisposable 인터페이스를 구현하여 객체 사용후 명시적으로 Dispose 메서드를 호출하면 해당 리소스를 더 빨리 해제할 수 있습니다.
클래스 형식보다 스트럭트 형식 사용하기 힙 메모리 대신에 스택 메모리를 사용하기 때문에 가비지 컬렉션의 대상이 되지 않는다.
'프로그래밍 > 개념정리' 카테고리의 다른 글
[03] 접근제한자의 종류와 차이 (0) | 2024.03.25 |
---|---|
[07] 배열 , List, ArrayList, Dictionary (0) | 2024.03.25 |
[06] 박싱과 언박싱 (0) | 2024.03.25 |
[02] ref와 out의 차이 (1) | 2024.03.25 |
[01] float과 int의 표현 가능한 수의 범위 차이 (0) | 2024.03.25 |