프로그래밍 언어의 메모리 관리 기능으로 더 이상 사용되지 않거나 참조되지 않는 객체를 자동으로 찾아서 메모리에서 해제하는 역할을 한다. 이를 통해 개발자가 명시적으로 메모리를 해제하지 않아도 메모리 누수를 방지할 수 있다.
1. 동적 메모리 할당
대부분의 현대 프로그래밍 언어(Java, Python 등)는 객체를 생성할 때 메모리를 동적으로 할당한다.
그러나 개발자가 모든 메모리를 직접 해제하려면 실수로 메모리를 해제하지 않거나 잘못된 메모리를 해제해 프로그램이 충돌할 수 있다.
2. 자동화된 메모리 관리
가비지 컬렉터는 이러한 작업을 자동으로 수행해서 개발자가 메모리 관리를 직접 하지 않아도 되도록 돕는다.
1. 자동 메모리 관리
개발자가 명시적으로 메모리를 해제하지 않아도 된다.
2. 비동기적 동작
대부분의 가비지 컬렉션은 비동기로 동작하고 애플리케이션 실행 중에 발생한다.
3. 오버헤드
가비지 컬렉터가 실행될 때 애플리케이션의 성능이 잠시 저하될 수 있다(Stop-the-world).
메모리는 조리대로 비유할 수 있다!
코드에 작성하는 변수, 함수, 객체들은 메모리 공간을 차지하는 요소들 즉 재료들과 도구라고 생각하면 됩니다. 근데 조리장이 멘탈이 약하고 자기주도적이지 못해서 공간이 꽉차면 그냥 드러누워버린다 ㅠㅠ 그래서 내가 중간 중간 치워줘야 합니다..
아무리 신중한 프로그래머가 조심스럽게 코드를 짠다고 해도 비워줘야 할 메모리 공간을 깜빡 놓치고 남겨두는 일들이 생기는데, 이걸 메모리 누수(memory leak)라고 한다.
메모리가 세서 흘러내린 것들이 쌓여서 메모리가 꽉차면 컴퓨터가 뻗게 된다.
그래서 자바나 새로운 언어들에게는 가비지 컬렉터란 것을 도입하게 됐다.
프로그래머가 일일이 하던 일을 대신 해주는 것이죠.
이렇게 메모리를 알아서 관리 해주는 언어들을 managed language라고 한다.
반대는 unmanaged language!!
언어와 동작하는 환경마다 다르지만 특정 때에 특정 방식으로 필요없는 정보들(garbage)들을 쓸어담아 버립니다.
메모리 누수를 방지하는 방식은 어느정도 공통적인 것도 있지만 뭘 프로그래밍 하느냐에 따라 다른 부분들도 있다고 한다. 언어나 환경마다 특성이 다르기 때문에 여기서 누수 방지에 효과적인 방식이 저기서는 성능만 저하시키기도 한다. 코드만 짠다고 해서 다 되는 것이 아니라 메모리 관리 방식도 생각해야 한다니.. ㅠ 갈길이 아직 멀었다. 구글링을 통해서 메모리 관리 할 수 있는 팁들도 검색을 해봐야겠다.