Free Lines Arrow
본문 바로가기
Language/Java Architecture

[Java] Garbage Collector

by skahn1215 2021. 8. 24.
728x90
반응형

Garbage Collector란?

  • 메모리를 해제 하는 역할 을 한다.
  • 줄여서 GC 라고 한다.
  • C/C++ 에서는 사용자가 직접 해제를 해줘야한다.
  • 하지만 자바에서는 GC가 자동으로 관리를 해준다.

 

Garbage Collection 동작원리

  • GC 동작은 Young generation 과 Old generation 영역에서 발생한다. 
  • Young generation 과 Old generation 은Heap에 존재한다.
  • STW(Stop-The-World): GC를 실행하기 위해 어플리케이션을 멈추는 것을 말한다.
    - GC 튜닝은 STW 시간을 줄이는 것이다.

 

 

 

JVM memory 의 구조

 

 

 

Young generation 영역

  • Eden, Survior1, Survior2 영역으로 나뉜다.
  • Eden:
    최초 객체가 생성되는 영역

  • Survior1:
    Eden 영역이 가득 찾을때 객체가 참조 되는지 여부에 따라 옮겨지는 영역

  • Survior2:
    Eden이 다시 가득 찾을때 Survior1 에 있는 객체중 참조 되고 있는 객체가 옮겨지는 영역

 

 

 

Old generation 영역

  • young generation에서 살아남은 객체가 존재하는 영역이다.

 

 

 

Garbage Collection 동작과정

 

Minor GC 의 동작과정

  • 1. 객체가 새롭게 생성될때 마다 eden 영역에 메모리가 할당 된다.
  • 2. eden 영역이 가득 차면 Minor GC가 동작한다.
  • 3. eden 영역에 살아 있는 객체는 suvivor1 으로 카피 된다.
  • 4. eden 영역은 비워지게 된다.
  • 5. eden 영역이 다시 꽉 차게되면 살아 있는 객체들은 suvior1 -> suvivor2 로 이동하고 eden -> suvior1 으로 이동한다.
    - suvivor1, suvivor2 로 이동하는 이유는 단편화 방지이다.
  • 6. Age bit에 살아남은 횟수를 기록한다. 
  • 7. Age bit가 threshold값 이상이 되거나 survivor영역의 메모리가 부족해지면 old영역으로 이동한다.

 

 

Major GC의 동작과정

  • Old영역에 데이터가 가득차면 GC를 실행한다.
  • Serial GC, Parallel GC, Parallel Old GC 3개의 경우가 있다.

 

Serial GC

  • mark-sweep-compaction 알고리즘을 사용한다.
  • 1. Mark: old 영역에 살아 있는 객체를 마크한다.
  • 2. Sweep: heap 의 앞부분부터 살아 있는 객체를 제외하고 다 없앤다.
  • 3. Compaction: 살아 있는 객체들을 Heap의 앞 부분부터 채운다.

 

 

Parallel GC

  • Minor GC 를 멀티쓰레드로 동작한다.

 

 

Parallel Old GC

  • Parallel Old GC에서는 멀티 스레드가 Old 영역을 논리적으로 균일하게 나눈 Region(2KB 정도의 chunk) 단위로 GC를 수행한다.

 

 

참고

사실 동작과정은 이것보다 더 복잡하지만 일단 쉽게 이해하기 위해 이렇게 동작하는 것만 

이해하려고 작성 하였습니다.

 

추가로 더 공부하여 깊이 있게 작성할 예정입니다.

728x90
반응형

'Language > Java Architecture' 카테고리의 다른 글

[Java] Java 실행과정 및 JVM  (0) 2021.08.20

댓글