가비지 컬렉션(GC) 란?
동적할당으로 할당한 데이터중, 사용하지 않는 데이터를 자동으로 삭제한다.
가비지 컬렉터는 언제 작동하는가?
메모리가 부족할 경우 가비지컬렉터가 작동해 링크가 끊기거나 더이상 필요하지 않은
메모리들을 할당 해제 한다.
서버에서 가비지 컬렉터는 ?
서버는 언제 집중 부하가 걸릴지 모르기 때문에,
여유로울때마다 자동으로 가비지컬렉터를 작동시켜 메모리를 확보 하는 것이 좋다.
JAVA 가비지 컬렉터
자바에서는 기본적으로 가비지 컬렉터가 기본으로 작동을 합니다.
그래서 C계열을 먼저 접하신분들은 왜 메모리 할당 해제 기능이 없는지 의아 해 하실수도 있는데
JAVA에서는 기본적으로 자동으로 정리를 해 줍니다.
C++ 의 가비지 컬렉터?
C++에서는 기본적으로 자동으로 가비지 컬렉팅을 해주는 기능이 없습니다.
그래서 코드 작성시에 유의하여, 수동으로 메모리 할당 해제 기능을 사용하여
쓸대없는 메모리가 남지 않도록 하여야 합니다.
그러나 정의 부분에서 자동으로 가비지컬렉팅이 되도록 하는 방법이 있습니다.
C++의 레퍼런스 카운터
레퍼런스 카운터는 직접 정의하여 사용을 하게 되는데,
레퍼런스 수를 관리하는 클래스를 만들어 상속 받아 클래스를 만드는 것 입니다.
즉, 참조하는 함수,클래스 등이 늘어나면 레퍼런스 카운터를 1 늘리고,
줄어들게 되면 카운터를 1 줄입니다.
그리고 카운터가 0이되면 해당 메모리를 할당 해제 하는 방식입니다.
스마트 포인터
Unique, Shared, Weak 총 3가지 스마트 포인터가 존재하며
#include <memory>
를 통해 사용 하게 됩니다.
유니크의 경우, 하나의 메모리에 하나의 포인터만을 만드는 것이고,
쉐어드의 경우 하나의 메모리를 여러 포인터가 가르킬 수 있게 만들어,
위의 레퍼런스 카운터 방식으로, 참조하고 있는 레퍼런스 갯수를 래핑 하고 있는 클레스여서
레퍼런스카운터가 0이되면 메모리 할당을 해제 하게 된다.
자세한 사항은 나중에 직접 실습하며 진행 해 보도록 하겠다.