(1) Garbage Collection(가비지 컬렉션 줄여서 GC) 이란?
1) JVM 은 Heap 메모리에 객체를 생성합니다. GC 는 이런 JVM 의 Heap 메모리를 정리하는
알고리즘을 말합니다.
2) 한마디로 GC 는 메모리 관리 기법 중 하나로 메모리 영역 중에서 더 이상 사용하지 않는 영역들을
정리해서 메모리를 관리해주는 기법이라고 할 수 있습니다. 즉, 동적으로 할당된 메모리 영역 중에서
어떤 변수도 가리키지 않는 메모리 영역을 탐지하여 자동으로 해제하도록 해줍니다.
3) 좋은 Java 개발자가 되려면 GC 에 대해 잘 알고 있어야 합니다. 자신이 개발하는 애플리케이션의
특징에 따라 어떤 GC 알고리즘을 선택할 것인지 고민해야 합니다.
(2) Garbage Collection 의 동작 원리
1) Garbage Collection 에는 Garbage Collection 알고리즘을 수행하는 Garbage Collector 가 존재합니다.
2) Java 의 Heap 메모리는 3개의 Generation(제너레이션)으로 쪼갤 수 있습니다.
<1> Young Generation
1> Young Generation 은 모든 새로운 객체가 할당되는 영역입니다.
2> Young Generation 은 또다시 Eden, Survivor Space 0, Eden, Survivor Space 1 로 세분화
되어집니다.
1. 새로 생성한 대부분의 객체는 Eden 영역에 위치합니다.
2. Eden 영역에서 Minor GC 가 한 번 발생한 후 살아남은 객체는 Survivor 영역 중 하나로
이동됩니다.
3. Minor GC 가 계속 발생해서 Survivor 영역에 객체가 계속 쌓이다가 하나의 Survivor 영역이
가득 차게 되면 그 중에서 살아남은 객체를 다른 Survivor 영역으로 이동시킵니다. 그리고
가득 찼던 Survivor 영역은 아무 데이터도 없는 상태가 됩니다.( Survivor 영역 중에 하나는
반드시 비어 있는 상태로 남아 있어야 합니다.)
4. 이 과정이 반복되다가 계속해서 오래 살아있는 객체는 Old 영역으로 이동하게 됩니다.
3> Minor GC 는 Stop the world 를 발생시킵니다. 객체가 사라질 가능성이 높다면 빠르게 정리가
되고, 살아남은 객체들은 Old 영역으로 옮겨집니다. 이 Young 영역에서만 GC 가 자주
발생되도록 해야합니다.
3> Stop the World 란 GC 스레드를 돌리기 위해서 JVM 앱을 중지시키는 것 입니다. GC 가
이루어지는 동안에는 모든 프로세스와 스레드가 잠시 동작을 멈춥니다.
<2> Old Generation
1> Old Generation 은 Young 영역에서 오래 살아남은 객체를 저장합니다.
2> Old 영역은 대부분 Young 영역보다 크게 할당합니다. 크기가 Young 보다 크기 때문에 GC는
Young 보다 적게 발생하게 됩니다.
3> Old 영역도 역시 객체들로 다 차면 Major GC 가 발생합니다. Major GC 역시 Stop the world 를
일으키는데, Major GC 는 전부 살아있는 객체가 있을 수 있기 때문에 시간이 오래 걸릴 수도
있습니다. Stop the World 에 걸리는 시간은 이 Major GC 에 의해 결정된다고 해도 과언이
아닙니다.
<3> Permanent Generation( Java8 부터는 Metaspace )
1> Permanent Generation 는 JVM 이 Class 와 Method 에 대한 메타데이터를 저장하도록 하는
영역입니다.
2> 앱의 생명주기 동안 JVM 에 의해 사용중인 Class 가 채워지고, Java 라이브러리, Method 가
이 구역에 저장될 수 있습니다. 또한 JVM 이 더 이상 필요하지 않은 메타데이터를 발견하면
Full GC 가 수행됩니다. (단, Java 8 부터는 Permanent Generation 영역이 Metaspace 영역으로
대체되었습니다.) Heap 영역 보다는 Method 영역에 적합한 것 같습니다.
참고 자료:
https://d2.naver.com/helloworld/1329
https://imasoftwareengineer.tistory.com/103
https://lovestudycom.tistory.com/207
'Android' 카테고리의 다른 글
Android 09. Application Class 란? (0) | 2022.06.09 |
---|---|
Android 07. Android Open Source License 종류 (0) | 2022.06.03 |
Android 06. Platform Architecture(플랫폼 아키텍처) (0) | 2022.05.30 |
Android 05. 동기(Synchronous) & 비동기(Asynchronous) (0) | 2022.05.26 |
Android 04. 안드로이드의 가상머신은? (0) | 2022.05.19 |