공부일지

가비지 컬렉터 본문

코딩/면접질문

가비지 컬렉터

이하택 2023. 11. 13. 14:08

목차


가비지 컬렉터란

답변

C# 메모리 관리 시스템의 핵심 컴포넌트, 사용되지 않는 메모리를 자동으로 찾아 해제한다.

  • 개발자의 관리가 필요 없어 메모리 낭비 방지하고 관리를 단순화 시킨다.

  • 사용하지 않는 메모리 해제, 메모리 할당 요청 처리, 새 객체에 할당 가능한 메모리 공간 찾기 등의 작업을 진행한다.

  • Mark ans Sweep 알고리즘을 사용하여 실행 중인 프로그램에서 접근 가능한 객체를 표시하고 표시되지 않는(:접근 불가) 객체를 메모리에서 제거한다.

파생질문

가비지가 뭐임?

  • 동적 메모리 중 사용되지 않는 것
  • 이걸 세분화하면 세대가 나옴.
    • 0,1,2 참조 메모리 중 0세대가 가장

덧붙일 것

  • C# 애플리케이션 메모리는 공간을 순차적을 채우기 때문에 할당을 반복하면 힙의 마지막 주소에 도달
    • 이때 GC가 필요없는 메모리를 수집하여 할당을 해제

  • 메모리 해제 과정
    • Managed Heap의 모든 메모리 영역을 Garbage로 간주하여 초기화
    • 루트 목록을 돌며 루트가 가리키는 영역과 아닌 영역을 구분
    • 루트와 무관한 영역만 Garbage로 남기고 해당 영역 해제
    • Managed Heap을 순차 탐색하며 해제해 공실이 된 영역을 채우기 위해 앞선 영역을 당겨 연속된 메모리 공간으로 만듦

  • Generation
    • GC를 여러 번 겪고 메모리에 남아있다면 계속 사용될 가능성이 높으므로 회수에 대하여 후 순위로 지정하고 나머지 영역에 먼저 주목한다.
    • 따라서 할당한지 얼마 안 된 영역일수록 빈번하게 가비지 컬렉션이 일어남.

가비지 컬렉터 회피 전략에는 무엇이 있는가?

답변

  1. 할당을 최소화하여 임시 변수나 큰 배열을 필요할 때마다 계속 생성하는 대신 재사용하거나 빈도를 줄인다.
    • 재사용 가능 객체는 미리 생성하고 재사용해서 객체 생성을 최소화.
  1. 너무 큰 객체의 할당을 피하기
  1. 루트를 너무 많이 만들지 않기
  1. 가비지 컬렉션 빈도 줄이기
  1. IDis

파생 질문

  • 왜 회피 되지요?

덧붙일 것

  • 할당을 최소화한다는 건



Uploaded by N2T