상세 컨텐츠

본문 제목

[JVM] Garbage Collector 동작방식

IT_리뷰_일상

by Beomi 2023. 6. 1. 11:00

본문

728x90

1. GC (Garbage Collector)이란?

- JAVA에서 메모리 관리를 GC라는 알고리즘을 통해 관리한다.

- 메모리를 점유하고 있는 Object들 중 더 이상 필요 없다고 판단되는 것들을 정리해주는 것

 

1) GC의 역할

- 메모리 할당

- 사용중인 메모리 인식

- 사용하지 않는 메모리 인식

 

2) GC 과정

- Minor GC

1. Eden 영역에 새로 생기는 Object들이 쌓여 FULL 상태가 됨.

2. Eden 영역의 Live Object를 확인하여 S1 영역으로 Copy, Eden 영역에는 garbage만 남게 됨.

3. Eden 영역의 garbage 들을 scavenge하여 Eden 영역을 비우고, S1의 Tenuring Threshold 값이 1 증가.

4. 이 후 또 Eden 영역에 Object들이 생성되고 가득 차면 Eden 영역과 S1영역의 Live Object들을 확인 후 이들을 S2로 Copy.

5. Eden과 S1 영역을 scavenge하여 지움. S2와 S1의 이름을 바꾸고 Live Object들의 Tenuring Threshold 값을 1 증가

6. 이 후 또 Eden 영역에 Object들이 생성되고 가득 찰 때 위의 과정을 반복하게 되는데 이 과정 중에 MaxTenuringThreshold 값과 같은 Object가 있다면 Old 영역으로 이동(Promotion)

 

- Major GC

1. Minor GC가 계속 진행되면 Old 영역 또한 가득 차게 됨.

2. Mark, Sweep 과정을 통해 Old 영역에서 더 이상 참조되지 않는 Object를 삭제하고, 메모리 단편화를 방지하기 위해 Compact 작업을 수행하게 됨.

 

2. IBM의 GC policy

ð IBM JVM에서는 총 6가지의 GC 방식을 제공하는데, 이 중 두가지는 현재 거의 사용되지 않고 4가지 설정이 보편적(?)입니다.

ð -Xgcpolicy: < balanced | gencon | optavgpause | optthruput | metronome | subpool >

ð 이 설정을 통해 GC 방식이 선택되고 이에 따라 JVM의 Heap 구조도 변경이 됩니다.

IBMJDK GCPolicy

1. IBM JVM GC와 Sun JVM GC 비교

 

1) Sun JVM에서 Major GC에서는 Compaction으로 인해 GC Pause TIME이 급증하는 현상이 IBM은 상대적으로 Compaction 빈도가 높지 않아 보다 안정적.

 

2) Sun JVM은 Heap 구조가 Generation 구분으로 세밀한 튜닝이 가능.

하지만 IBM JVM은 gencon 이외에는 Generation 하지 않기 때문에 튜닝에서의 세밀함이 떨어짐. gencon으로 인해 Sun JVM과 거의 비슷한 설정이 가능하다곤 하는데 비교적 튜닝 옵션이 적음.

728x90

관련글 더보기