Garbage Collection

YES31·2023년 5월 12일
0

TIL

목록 보기
35/35

Garbage Collection

쓸모 없어진 객체가 차지하고있는 메모리를 자동으로 비워주는 것

JavaScript, Python, Java 는 가비지 컬렉터가 자동으로 메모리를 관리를 해준다. 이런 언어를 managed language 라고 한다.

자동으로 Garbage 메모리를 비워준다고 하더라도 100% 완벽하게 정리해주는 것은 아니다. 때문에 가비지 컬렉터를 완전하게 신용한다기 보다 개발자로서 메모리 관리에도 신경을 써야한다.

[Javascript 가비지 컬렉터]

  • 콜 스택을 검사하면서 가비지 데이터를 찾고, 가비지 데이터를 메모리에서 해제한다.
  • 전역 컨텍스트의 변수(전역 변수)는 일반적인 상황에서는 가비지 컬렉션의 대상이 되지 않는다.

메모리 누수

컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상

위에서 말한듯 가비지 컬렉터가 필요 없는 메모리를 완벽하게 비워주는것이 아니기 때문에 코드 작성에 따라 메모리 누수가 발생한다.

메모리 누수의 주된 원인은 '원치 않는 참조' (unwanted references)다. 이것이 무엇인지 알기 위해서는, 가비치 컬렉터가 어떻게 메모리가 여전히 유효한지를 결정하는 방법 이해 해야 한다.

.
.
.

Mark-and-sweep

[방법]

roots라는 전역변수의 집합부터 시작하여, roots가 참조하는 객체 -> 그 자식들이 참조하는 객체 -> ···

위 방식으로 접근 가능한 객체들을 선별하고 그 외 Mark되지 않는 데이터들을 가비지로 판단하는 방법이다.
아래 그림을 보면 더욱 이해하기 쉽다. MARK -> SWEEP -> COMPACT

[3가지 상태]

  • White : 아직 가비지 컬렉터가 탐색하지 못한 상태
  • Gray : 가비지 컬렉터가 탐색했으나, 해당 객체가 참조하는 객체들은 탐색하지 못한 상태
  • Black : 가비지 컬렉터가 탐색했고, 해당 객체가 참조하는 객체들도 탐색 완료한 상태

.
.
.

Reference-Counting

참조 개수를 카운팅하여 참조가 하나도 없으면 가비지로 판단하는 방법


Reference

얇코: 가비지 컬렉터란?
Mdn: Memory Management
Mark-and-sweep
Reference-Counting

profile
🏀 주니어 개발자

0개의 댓글