본문 바로가기
개발 공부/네트워크 기초

가비지컬렉션 개념정리

by 크롱이크 2021. 8. 6.

가비지 컬렉션(garbage collection)

가비지 컬렉션은 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것이다.

이 기능을 가진 언어(혹은 엔진)는 자바, C#, 자바스크립트 등이 있다.

 

자바스크립트는 눈에 보이지 않는 곳에서 메모리 관리를 수행한다.

원시값, 객체, 함수 등 우리가 만드는 모든 것은 메모리를 차지한다.

그렇다면 더는 쓸모 없어지게 된 것들은 어떻게 처리될까?

지금부턴 자바스크립트 엔진이 어떻게 필요 없는 것을 찾아내 삭제하는지 알아보겠습니다.

 

가비지가 되는 대상

어떤 객체에 유효한 참조가 존재한다면 Reachable, 그렇지 않다면 Unreachable이라 한다.

언리쳐블한 객체는 수거 대상이 된다.

트레이싱

한 객체에 flag를 두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법

객체에 in-use flag를 두고, 사이클마다 메모리 관리자가 모든 객체를 추적해서 사용중인지 아닌지를 표시(mark)한다.

그 후 표시되지 않은 객체를 삭제(sweep)하는 단계를 통해 메모리를 해제한다.

 

레퍼런스 카운팅

한 객체를 참조하는 변수의 수를 추적하는 방법

 

객체를 참조하는 변수는 처음에는 특정 메모리에 대해 레퍼런스가 하나뿐 이지만,

변수의 레퍼런스가 복사될 때마다 레퍼런스 카운트가 늘어난다.

객체를 참조하고 있던 변수의 값이 바뀌거나, 변수 스코프를 벗어나면 레퍼런스 카운트는 줄어든다.

레퍼런스 카운트가 0이 되면, 그 객체와 관련한 메모리는 비울 수 있다.

레퍼런스 카운트가 0이 된다는 말은 아무도 그 객체에 대한 레퍼런스를 가지고 있지 않다는 말과 같다.

 

 

 

중요*

가비지 컬렉션은 프로그램에서 더 이상 쓰지 않는 메모리를 찾아서 회수하는 기능이다

가비지 컬렉션은 개발자가 직접 메모리를 다룰 때에 생길 수 있는 메모리 누수를 방지할 수 있다

 

마지막 정리*

가비지 콜렉터는 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능을 말한다. 더 이상 사용되지 않는 메모리란 간단히 말하자마녀 어떤 식별자도 참조하지 않는 메모리 공간을 의미한다. 자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지드 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지한다.

 

 

 

출처

코드스테이츠

https://www.youtube.com/watch?v=Fe3TVCEJhzo

https://www.youtube.com/watch?v=24f2-eJAeII

반응형

댓글