Garbage Collection

Creating the dots·2021년 9월 10일
0

CS

목록 보기
4/19

Garbage Collection이란?

C,C++ 같은 언어에서는 메모리 추적이 매우 중요하다. 개발자가 직접 메모리를 할당하고 추적해야한다. 반면, 자바스크립트는 '가비지 콜렉션 언어'라고도 불리는데, 필요한 메모리를 자동으로 할당하고 더 이상 사용하지 않는 메모리를 회수하므로 개발자가 직접 메모리를 관리하지 않아도 된다.

여기서 말하는 가비지 콜렉션이란, 메모리 관리 기법 중의 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능을 말한다.

이 프로세스는 주기적으로 실행되는데 코드 실행 중에 특정 시점에 메모리를 회수하도록 지정할 수도 있다.

Garbage Collection 방식

  • 트레이싱: 한 객체에 flag를 두고 가비지 콜렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법이다. 객체에 in-use flag를 두고, 사이클마다 메모리 관리자가 모든 객체를 추적해서 사용중인지 아닌지를 표시(mark)한다. 그 후 표시되지 않은 객체를 삭제(sweep)하는 단계를 통해 메모리를 해제한다.

  • 레퍼런스 카운팅: 한 객체를 참조하는 변수의 수를 추적하는 방법이다. 객체를 참조하는 변수는 처음에는 특정 메모리에 대해 레퍼런스가 하나뿐이지만, 변수의 레퍼런스가 복사될때마다 레퍼런스 카운트가 늘어난다. 객체를 참조하고 있던 변수의 값이 바뀌거나, 변수 스코프를 벗어나면 레퍼런스 카운트는 줄어든다. 레퍼런스 카운트가 0이되면, 그 객체와 관련된 메모리는 비울 수 있다. 레퍼런스 카운트가 0이 된다는 말은 아무도 그 객체에 대한 레퍼런스를 가지고 있지 않다는 말과 같다.

profile
어제보다 나은 오늘을 만드는 중

0개의 댓글