목차
가비지 컬렉터란
답변
C# 메모리 관리 시스템의 핵심 컴포넌트, 사용되지 않는 메모리를 자동으로 찾아 해제
한다.
- 개발자의 관리가 필요 없어 메모리 낭비 방지하고 관리를 단순화 시킨다.
- 사용하지 않는 메모리 해제, 메모리 할당 요청 처리, 새 객체에 할당 가능한 메모리 공간 찾기 등의 작업을 진행한다.
- Mark ans Sweep 알고리즘을 사용하여 실행 중인 프로그램에서 접근 가능한 객체를 표시하고 표시되지 않는(:접근 불가) 객체를 메모리에서 제거한다.
파생질문
가비지가 뭐임?
- 동적 메모리 중 사용되지 않는 것
- 이걸 세분화하면 세대가 나옴.
- 0,1,2 참조 메모리 중 0세대가 가장
덧붙일 것
- C# 애플리케이션 메모리는 공간을 순차적을 채우기 때문에 할당을 반복하면 힙의 마지막 주소에 도달
- 이때 GC가 필요없는 메모리를 수집하여 할당을 해제
- 메모리 해제 과정
- Managed Heap의 모든 메모리 영역을 Garbage로 간주하여 초기화
- 루트 목록을 돌며 루트가 가리키는 영역과 아닌 영역을 구분
- 루트와 무관한 영역만 Garbage로 남기고 해당 영역 해제
- Managed Heap을 순차 탐색하며 해제해 공실이 된 영역을 채우기 위해 앞선 영역을 당겨 연속된 메모리 공간으로 만듦
- Generation
- GC를 여러 번 겪고 메모리에 남아있다면 계속 사용될 가능성이 높으므로 회수에 대하여 후 순위로 지정하고 나머지 영역에 먼저 주목한다.
- 따라서 할당한지 얼마 안 된 영역일수록 빈번하게 가비지 컬렉션이 일어남.
가비지 컬렉터 회피 전략에는 무엇이 있는가?
답변
할당을 최소화
하여 임시 변수나 큰 배열을 필요할 때마다 계속 생성하는 대신 재사용하거나 빈도를 줄인다.재사용 가능 객체
는 미리 생성하고 재사용해서 객체 생성을 최소화.
- 너무 큰 객체의 할당을 피하기
- 루트를 너무 많이 만들지 않기
- 가비지 컬렉션 빈도 줄이기
- IDis
- ㄹ
파생 질문
- 왜 회피 되지요?
덧붙일 것
- 할당을 최소화한다는 건
Uploaded by N2T