ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java Garbage Collection에 대하여
    Study/면접준비 2019. 8. 14. 19:10

    면접 단골 질문이라서 공부 할 겸 정리해보자... 어려워..ㅜㅜ

     

    간단히 말하면 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다.

    GC는 힙 영역에서 이루어진다. JVM은 메모리의 구역을 나누어 GC를 진행한다.

     

    메모리 구역을 크게 Young Generation, Old Genertaion, Permanent Generation 으로 나눈다.

     

    Young 영역은 Eden, 두개의 Survivor Space로 구성되어있다.

    새로운 객체가 할당되면 Eden 구역에 할당 된다. Eden 구역이 가득차면 쓰이지 않는 객체를 마킹하고 GC를 한다. 여기서 발생하는 GC는 minor GC라고 한다. 이후 살아남은 객체들은 첫번째 Survivor(s0)로 이동한다. 

    Eden구역과 s0 영역에서 다음 minor GC가 발생하면 Eden에서 살아남은 객체들은 두번째 Survivor(s1) 로 이동하고, s0에서 살아남은 객체들은 age가 증가한다. 이동 후 Eden 과 s0 은 빈공간이 된다. 

    다음 minor GC때도 이 과정이 반복된다. Survivor space는 스위치 되고 살아남은 객체들은 age가 증가한다.

     

    이후 일정한 age를 넘은 객체들은 old 영역으로 이동한다.

    old 영역에서 발생하는 GC를 major GC라고 한다. 메모리를 제거하고 힙정렬이 되는 동안 Stop the world 즉, GC를 수행하는 스레드 외 나머지 스레드는 멈춘다.

    이 STW시간은 성능에 영향을 미치며 이 시간을 줄이는 것이 GC튜닝의 목적이라고 할 수 있다.

     

     

     

     

     

    'Study > 면접준비' 카테고리의 다른 글

    Activity 생명주기  (0) 2019.08.14
    안드로이드 4대 컴포넌트  (0) 2019.08.14
Designed by Tistory.