본문 바로가기
Programming/C C++

Garbage Collection & Reference Counting

by Eisen Sophie 2020. 10. 22.

자동 메모리 관리를 통해서 프로그래머의 실수를 방지함으로써 결과적으로는 메모리 누수를 방지할수 있다.

 

자동 메모리 관리를 위해서 사용하는 방법에는 2가지 방법들이 있다.

1. Garbage Collection - 보통 Tracing Garbage Collection을 의미

2. Reference Counting

 

지금 살펴 볼것은 Garbage Collection이다.

 

 

Garbage Collecting

Garbage Collection(GC) 작동 원리:

- gc는 주기 적으로 사용하지 않는 메모리들을 collect를 한다.

- gc는 여유 메모리가 모자를때 collect를 한다.

- gc는 Root를 확인한다.

           gc는 heap에 있는 메모리를 Root를 통해 접근이 가능한지 판단한다.

           이때 접근이 불가능하다면, 해당 메모리는 collect된다.

 

 

Garbage Collection

저기에서 stack은 Root들을 가지고 있다.

 

Heap에서 초록색 메모리 영역들은 Root와 연결이 되어서,

 

Root를 통해서 접근이 가능한 메모리들이다.

 

회색 메모리 영역들은 어떠한 것들과도 연결이 되어 있지 않으며, 

 

그저 Heap영역을 차지하고 있을 뿐이다.

 

gc는 저런 회색 메모리를 찾아서 collecting을 한다.

 

 

 

Reference Counting

앞에 Garbage Collecting에 이어서 Reference Counting을 소개하겠다.

 

Reference Counting은 객체가 가지고 있는 reference count(참조 횟수)가 0이 되었을때,

 

해당 객체의 메모리를 즉시 해제하는 방식이다.

 

Garbage Collecting은 쓰이지 않는 메모리를 즉시 해제하는 것이 아니지만, 

 

Reference Counting 방식은 즉시 해제한다는 것이 Garbage Collecting 보다는 장점이다.

 

 

 

참조:

docs.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals