-
GC(Garbage Collection) 가비지 컬렉터Domain knowledge 2019. 8. 27. 01:33반응형
GC(Garbage Collection)는 프로그램이 실행되면서 메모리에 할당한 내용이 더이상 프로그램에서 사용하지 않을경우
자동으로 메모리에 할당한 영역을 제거하는 메모리 관리 방법이자 메모리를 관리하는 기능을 말합니다.
기본적으로 메모리를 할당하고 해제하는 것은 프로그래머가 직접 코드로 작성하여야 하나 프로그래머의 실수나 구조상의 문제등으로 메모리 누수가 발생할 수 있기때문에 자동으로 메모리를 관리해주는 GC가 나오게 되었습니다.
가장 대표적인것이 JVM의 GC 입니다.
GC의 역할은 3가지 입니다.
1. 메모리 할당
2. 사용중인 메모리 확인
3. 비사용중인 메모리 확인
자바(JAVA)에서 기본적으로 메모리는 5가지 영역으로 나누며
스텍영역(Stack Area) , PC 레지스터(PC Register), 기본메소드 영역(Native Method Area) , 메소드영역(Method Area), 힙(Heap) 영역 이며 GC는 힙 영역에서 작동합니다.
힙 영역은 아래 그림과 같이 구조를 가집니다.
크게 Young 과 Old 으로 나뉘어 져있으며 그림상의 Permenent 영역은 jdk8 에서 부터 사라진 영역입니다.
https://www.oracle.com/java/technologies/javase/8-whats-new.html
힙(heap)영역에서의 메모리 할당은은 아래와 같이 작동합니다.
- 최초 객체가 생성시 eden 영역에 할당합니다.
- eden 영역이 가득(또는 일정기준이상)차면 eden 영역의 비사용중인 객체를 지우고 사용중인 객체을 S0 으로 이동시킵니다.
- S0영역이 가득(또는 일정기준이상)차면 S0, eden 영역의 비사용중인 객체를 지우고 사용중인 S1으로 이동시킵니다.
- 해당기능이 반복적으로 일어나면서 S1영역에서 일정횟수 이상 유지되고 있는 겍체들은 Old 영역으로 이동됩니다.
- Old 영역이 가득(또는 일정기준이상)차면 힙영역 전체에 비사용중인 객체를 지우고 객체를 지웁니다.
Young영역(eden, S0, S1)에서 작동하는 GC를 Minor GC 라고 하며
Old 영역에서 작동하는 GC를 Major GC 라고 한다.
이와 같이 반복후에도 힙영역이 가득차서 더이상 새로 발생하는 객체를 할당할 수 없게 되면 OOM(Out Of Memory)이 발생하게 됩니다.
GC의 작동방식은 Serial Collector, Parallel Collector, Parallel Compacting Collector, Concurrent Mark-Sweep Collector (CMS), Garbage First Collector(G1) 가 있습니다.
[참고링크]
https://source.android.com/devices/tech/dalvik/gc-debug
https://stackoverflow.com/questions/4818869/technical-details-of-android-garbage-collector
https://velog.io/@litien/%EA%B0%80%EB%B9%84%EC%A7%80-%EC%BB%AC%EB%A0%89%ED%84%B0GC
https://2ssue.github.io/base/190509_PJI/
https://brucehenry.github.io/blog/public/2018/02/07/JVM-Memory-Structure/
https://steady-coding.tistory.com/305
https://deveric.tistory.com/64
https://goodgid.github.io/Java-8-JVM-Metaspace/
반응형'Domain knowledge' 카테고리의 다른 글
핸드셰이킹 (handshake) (0) 2020.11.10 FLOPS (Floating point operations per second) (0) 2020.10.05 클린 아키텍처(Clean Architecture) (0) 2020.01.18 JAVA String 객체 와 String 리터럴(literal) (0) 2019.10.16 러너블(Runnable)이란? (0) 2019.10.05 함수(Funtion)와 메소드(Method)의 차이 (0) 2019.09.21 BIG-O Notation (빅오표기법) (0) 2019.09.18 객체지향 디자인 5원칙 (SOLID) (0) 2019.09.18