티스토리 뷰

가비지 컬렉터란 무엇인가?

우리가 일을 할 때는 노트북, 책, 필기 도구등을 올려놓을 공간(책상)이 필요하다. 마찬가지로 컴퓨터도 일을 할 때 처리할 정보들을 올려놓을 공간이 필요하다. 책상이 넓으면 넓을 수록 더욱 다양한 일을 할 수 있다. 

(우리가 다다익램(램은 많으면 많을 수록 좋다)이라고 외치는 이유다.)

 

하지만 우리가 공부, 또 다른 공부, 또 다른 공부를 계속 하다 보면 새로운 책이 쌓이고 쌓여서 책상이 가득차게 되고 도무지 일을 할 수 없는 상태가 될 것이다. 그래서 가끔씩 책상을 치워줄 필요가 있다.

 

내가 어지른 책상은 내가 치우는게 당연하지만 나는 공부를 하느라 바쁘다고 가정하자. 그러다가 어지러운 책상을 보고 답답한 우리 엄마가 책상을 대신 치워줬다. 가비지 컬렉터는 이런 역할을 대신 해준다.

 

가비지 컬렉터의 등장!

원래 C나 C++과 같은 언어는 메모리에 차고 있는 데이터들을 개발자가 직접 지워줬어야 했다. 하지만 개발자도 사람인지라 가끔씩 지워야할 데이터를 깜빡하고 지우지 않는 경우가 있는데 이를 메무리 누수(Memory leak)이라고 한다.

 

하지만, 자바와 같은 새로운 언어들에 가비지 컬렉터를 도입하기 시작했다.

 

자바와 같이 메모리를 알아서 관리해주는 언어를 Managed Language라고 부르고 C, C++과 같이 개발자가 메모리를 관리해줘야 하는 언어를 Unmanaged language라고 부른다.

 

 

가비지 컬렉터가 일하는 방식

가비지 컬렉터는 언어와 동작하는 환경마다 다르기도 하고 특정 때에 특정 방식으로 지워야할 데이터를 쓸어담아다 버린다.

 

1. Mark-and-sweep

필요한 데이터들을 마크한 다음에 마크가 안 된 것들을 갖다 버린다.

 

2. Reference counting

한 요소가 다른 요소에게 몇 번이나 참조 되는지 세어서 그 수가 0이 되면 치운다.

 

 

가비지 컬렉터만 믿으라구??! 안 돼!

가비지 컬렉터는 멀티 쓰레드로 동작하여 프로그램 동작을 크게 방해하지 않고 동작하여 필요 없는 데이터를 지워 메모리 공간을 확보한다. 하지만, 가비지 컬렉터에도 한계가 있다. 사람이 직접 판단내리는 것이 아니기에 필요없는 데이터를 100% 지우지는 못 한다.

 

따라서 좋은 개발자가 되려면 메모리 관리에도 신경을 써야 한다. 위 문단에서도 말했다시피 가비지 컬렉터는 언어와 동작하는 환경마다 동작하는 방식이 다르다. 따라서, 내가 쓰는 언어, 플랫폼 기기에 바람직한 메모리 관리 방식을 배울 필요가 있다.

 

팁이 있따면 언어나 플랫폼마다 이 누수를 찾아내기 위한 방법, 디버깅, 모니터링 툴들이 있다.

ex) 1. JS 메모리 누수 사례, 2. 안드로이드에서 메모리 누수 잡기, 3. 파이썬에서 가비지 컬렉터 동작 방식

 

 

참고 자료

www.yalco.kr/04_garbage_collector/

 

가비지 컬렉터가 뭐하는 건가요?

어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!

www.yalco.kr

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함