728x90
1. GC(Garbage Collector)
이름에서 보이는 바와 같이 GC란 JVM 메모리를 자동으로 관리해주는 역할을 한다. (쓰레기 수집)
좀 더 전문적으로 이야기하면 JVM 메모리 중 Heap 영역에서 사용하지 않는 객체를 삭제하여 관리해주는 기능을 한다.
1.1 STW (Stop The World)
GC를 하며 메모리가 관리되는 동안 자바 어플리케이션이 멈추는 현상이 있는데 이를 Stop The World라고 부른다.
이 때, GC 스레드를 제외한 모든 스레드는 멈추게 된다.
2. GC 구조
일반적으로 GC구조(단일/병렬/CMS)는 Young 영역과 Old 영역으로 나뉜다.
2-1. Young Generation
Young 영역은 크게 3가지로 나뉜다.
- Eden 영역, Survivor1 영역, Survivor2 영역
- Young 영역에서 발생하는 GC를 Minor GC라고 부른다.
Eden(에덴) 영역
- 새롭게 생성된 객체가 위치하는 공간
- Eden 영역이 가득 차면 Minor GC가 발생하면서 Mark & Sweep 과정이 발생한다. (Mark : 접근 가능한 객체에 Mark하여 표시, Sweep : Mark되지 않은 객체들을 제거하는 과정)
- Mark되어 아직 사용 중인 객체는 Survivor 영역으로 이동하며 Eden 영역은 비워진다.
Survivor 영역
- 또 다시 Eden 영역이 가득 차게 되면 Minor GC가 발생하면서 Eden과 Survivor 영역에 접근할 수 없는 객체를 제거한다. (Mark 되지 않은 객체가 Sweep 됨)
- Mark된 살아남은 객체는 다른 Survivor 영역으로 이동하게 된다. (S0 -> S1)
- 이때 다른 Survivor 영역으로 이동한 객체는 age 값이 증가한다.
- 특정 age 값을 넘어가는 경우 Old 영역으로 이동하게 된다. (Promotion)
2-2. Old Generation
Young 영역보다 사이즈가 크기 때문에 GC가 적게 발생하지만 반대로 GC에 소요되는 시간은 오래 걸린다.
- Young 영역의 Survivor 영역에서 살아남은 객체들이 Old 영역에 위치하게 된다.
- Old 영역에서 발생하는 GC를 Major GC라고 부른다.
2-3. Permanent Generation
class 혹은 Method 코드가 저장되는 영역이다.
- PermGen은 Heap 영역에 속한다.
- Default로 제한된 크기를 가지고 있다.
- WAS 서버 기동 시 OutOfMemory PermGen이 발생한다면 클래스와 메소드 코드를 로드하는 과정에서 Perm 영역의 공간이 부족한 경우이기 때문에 -XX:PermSize와 -XX:MaxPermSize를 설정하여야 한다.
2-4. MetaSpace 영역
아래 글 참조
https://syhwang.tistory.com/30?category=1196279
728x90
'개발공부 > Java' 카테고리의 다른 글
[Java] 15. 상속에서 클래스 생성과 형 변환 (0) | 2022.01.24 |
---|---|
[JVM GC] GC 종류와 동작 방식과 G1GC 튜닝 포인트 (0) | 2022.01.05 |
[JVM ] JVM 메모리 (Runtime Data Area) (0) | 2022.01.04 |
[Java] 14. 객체 간의 상속 (0) | 2021.12.03 |
[Java] 13. 객체 배열을 구현한 클래스 - ArrayList (0) | 2021.12.01 |