가비지 컬렉터

TIL 카테고리의 글은 그날 배운 것을 정리하는 목적으로 포스팅합니다. 내용이 잘못되었다면 댓글로 피드백 부탁드립니다.

가비지 컬렉터

 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능

C와 같은 언어들은 프로그램을 짤 때 메모리를 직접 관리해주어야 함. 변수나 함수를 사용할 때 더이상 사용하지 않는 변수나 함수의 메모리를 직접 해제해주는 등..

만약 메모리를 비우지 않고 남긴 채로 계속 사용하다 보면 메모리 누수(memory leak)이 발생하게되고, 메모리가 꽉차게 되면 컴퓨터는터짐.

이렇게 직접 메모리를 관리하지 않고 가비지 컬렉터가 메모리를 직접 관리해주는 언어들이 생김. 이렇게 메모리를 직접 관리해주는 언어를 managed language 라고하고 그렇지 않은 언어를unmanaged language라고함.

가비지컬렉터는 특정 때에 필요없는 정보(garbage)를 버림.

가비지 컬렉터 동작 방식

  • mark-and-sweep
    • 메모리를 훑으면서 필요한 것들을 마크 후 마크되지 않은 것들을 버린다.
  • reference counting
    • 한 요소가 다른 요소에게 몇번 참조되는 지 센 후 참조 번수가 0인 요소를 삭제하는 것.

메모리 누수를 방지하는 법

  • 순환 참조를 하지 말자.

    • 변수끼리 서로 참조하는 것. 이렇게 되면 둘 다 참조 카운트가 0이 되지 않으므로 누수가 생김.

      1
      2
      3
      4
      5
      6
      7
      a = {}
      b = {}
          
      a['b'] = b
      b['a'] = a 
          
      # NO! 
      

refer

[얄팍한 코딩사전](https://www.youtube.com/watch?v=24f2-eJAeII )