-
가비지 컬렉터?
-
가비지 컬렉터를 회피하기 위한 전략
-
가비지 컬렉션이란?
기술 면접 예상 질문 - 가비지 컬렉터에 대해 설명해주세요
가비지 컬렉터란?
가비지 컬렉터란 C#이나 자바에서 메모리 관리를 자동화하여 개발자가 별도로 신경 쓰지 않아도 되게 해주는 시스템입니다.
만약 C,C++ 같이 가비지 컬렉터가 없는 언어에서는 어떤 인스턴스를 힙 영역에 할당하고 포인터 변수로 가르킬 때
이 포인터 변수가 다른 인스턴스를 가르키게 된다면 먼저 가르키고 있던 인스턴스에는 접근할 방법이 없어져 제거할수도 사용할수도 없는 메모리 누수가 발생합니다.
메모리 누수를 방지하기 위해 명시적으로 메모리를 해제해주어야 합니다.
하지만 C#이나 자바에서는 다릅니다.
가비지 컬렉터가 힙 영역의 메모리를 주기적으로 검사하여 이런 메모리 누수를 자동으로 해제해줍니다.
그렇기 때문에 개발자는 메모리 관리에 대해서 덜 신경쓰면서 작업을 진행할 수 있게 됩니다.
가비지 컬렉터의 동작 원리
기본적으로는 mark and sweep, 힙에 존재하는 객체 중 아직 참조되고 있는 객체를 mark하고, 아닌 객체를 sweep하는 방식
- 유니티에서는?
가비지 컬렉터의 비용
-
실행 시간의 오버헤드 : 가비지 컬렉터는 런타임 중에 메모리를 검사하고, 사용하지 않는 메모리를 해제하는 작업을 수행하기 떄문에 성능에 영향을 미칠 수 있습니다.
-
메모리 오버헤드 : 가비지 컬렉터가 메모리를 효율적으로 관리하기 위해서는 추가적인 메모리가 필요해 메모리 사용량이 증가할 수 있습니다.
가비지 컬렉터의 단점
-
예측 불가능한 정지 시간 : 대규모의 힙 메모리를 사용하는 경우 가비지 컬렉터의 실행동안 다른 부분이 일시 중지될 수 있습니다.
-
자원의 해제 시점 : 메모리가 언제 해제될지 항상 예측할 수 없기 때문에, 즉시 해제해야 하는 경우 문제가 생길 수 있습니다.
-
리소스 관리 : 가비지 컬렉터는 힙에 할당된 인스턴스의 메모리는 해제하지만 해당 인스턴스가 가진 외부 리소스까지는 해제해 주지 않습니다.
그래서 리소스 관리가 필요한 경우에는 따로 Finalize나 IDisposable를 사용해서 리소스를 해제 해주어야 됩니다.
Summary
가비지 컬렉터란 메모리 관리를 자동화하여 메모리 누수를 방지해 개발자가 별도로 신경쓰지 않게해주는 시스템입니다.
기본적으로 mark and sweep 방식을 사용해 아직 참조되는 객체를 mark하고 아닌 객체를 sweep해서 해제 해줍니다.
하지만 성능에 영향을 미칠 가능성이 있기 때문에 가비지 컬렉터의 사용을 최적화 하기 위한 전략들이 필요합니다.
기술 면접 예상 질문 - 가비지 컬렉터를 회피하기 위한 전략은 무엇이 있나요?
가비지 컬렉터는 힙 메모리 영역을 관리 합니다. 힙 메모리를 사용하는 참조 타입 인스턴스를 사용을 줄이는 것이 가비지 컬렉터를 회피하는 핵심 전략입니다.
-
값 타입 인스턴스 사용 : 값 타입 인스턴스는 기본적으로는 스택 메모리 영역을 사용해 가비지 컬렉터를 회피할 수 있습니다. 크기가 커지거나 배열 형태일 경우 힙 메모리를 사용하므로 주의해야 합니다.
-
객체 풀링 : 객체 풀링은 객체를 해제하지 않고 풀에서 참조하여 재사용하는 방법입니다. 이 방식으로 객체의 생성과 해제를 줄여 가비지 컬렉터를 회피할 수있습니다.
-
약한 참조 : WeakReference 를 이용하여 약한 참조를 하는 방법입니다. WeakReference 를 통해 약한 참조를 하게 됬을때 어떤 객체의 강한 참조가 남아있지 않고 약한 참조만 있다면 가비지 컬렉터가 해당 객체를 해제합니다. 이 방법은 가비지 컬렉터를 회피하는 방법은 아니지만, 메모리 사용량을 최적화 하는데 도움을 줍니다.
Summary
가비지 컬렉터는 힙 메모리 영역을 관리 합니다. 힙 메모리를 사용하는 참조 타입 인스턴스를 사용을 줄이는 것이 가비지 컬렉터를 회피하는 핵심 전략입니다.
예시로 작은 크기의 데이터를 값 타입으로 관리하는 방법, 객체 풀링을 사용하는 방법, 약한 참조를 통한 메모리 사용량 최적화 등이 있습니다.
기술 면접 예상 질문 - 가비지 컬렉션이란 무엇인지 설명해주세요
Summary
메모리 누수를 방지하고 메모리 관리 부담을 줄여주는 메모리 관리 전략중 하나로
가비지 컬렉터가 더 이상 사용되지 않는 메모리를 자동으로 식별하고 회수하는 프로세스 자체를 의미합니다.