본문 바로가기

개발 상식

가비지 컬렉션 원리

반응형

 

http://itmining.tistory.com/24

 

[JAVA] Garbage Collection의 기초

이 글은 PC 버전 TISTORY에 최적화 되어있습니다. 서론  이전에 안드로이드 메모리 관리 관련하여 Strong, Soft, Weak Reference에 대해 알아보면서 GC에 대해 살짝 언급한 적이 있습니다. Java의 가비지 컬

itmining.tistory.com

위 링크가 가비지 컬렉션에 대한 정리가 잘 되어 있는 것같아서 가져왔습니다.

 

프로그래밍 언어 C에서는 메모리의 할당, 반환을 수동으로 합니다.

그러나 자바에서는 GC에 의해서 자동으로 수행되는데 그 과정에 대해서 설명하겠습니다.

 

1단계 : Making

프로세스는 마킹을 호출해서 참조되는 객체와 참조되지 않는 객체로 스캔합니다. 모든 오브젝트를 스캔하기 때문에 많은 시간이 소요됩니다.

 

2단계 : Normal Deletion

참조되지 않은 객체를 제거하고 메모리를 반환합니다.

 

3단계 : Compacting

퍼포먼스를 향상시키기 위해, 참조되지 않는 객체를 제거하고 남은 참조되어지는 객초는 묶습니다. 묶음으로 공간이 생기므로 새로운 메모리 할당시에 더 빠르게 가능합니다.

 

모든 객체를 Making & Compacting 하는 것은 비효율적!

리스트들을 읽는 시간은 점점 길어지기 때문

 

보안방법을 찾다가 특징을 알아냈습니다.

1. 대부분의 객체는 짧게 생존한다. -> 금방 접근 불가능 상태가 된다.

2. 오래된 객체에서 젊은 객체로 참조는 적게 존재한다.

 

이 특징을 이용해 Heap 공간을 나눕니다.

 

1) Young

새롭게 생성한 객체의 대부분이 위치하는 곳, minor garbage collection이 일어난다.

Eden 영역과 survivor 영역으로 분리가 됨.

 

2) Old영역

Young 영역에서 생존한 객체들, Major GC가 발생 ( Minor보다는 드물게)

 

3) Permanent

메타데이터를 포함한 공간

 

이 공간으로 옮겨지는 과정을 보면

객체가 생성해서 처음으로 생기는 영역은 Eden입니다. Eden 영역에서 참조가 되는지 안되는지를 스캔하며 참조가 되는 객체는 survivor 영역으로 이동합니다. 이렇게 Minor GC가 반복하며 객체는 age가 증가하게 됩니다. 일정한 age가 넘게되면 Old 영역으로 이동합니다. Old영역에서는 Major GC가 시행하게 됩니다.

 

반응형