Unicorns

All the things

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java Study] - Garbage Collection(GC) in JVM
    Java 2021. 9. 26. 23:14

    JVM Execution Engine(실행 엔진) 안에 있는 Garbage Collcetion 은 자동으로 메모리를 관리해주는

    프로세스를 말한다. 

     

     

    Stack

    : 정적으로 할당한 메모리 영역

    원시 타입의 데이터가 값과 함께 할당,  Heap 영역에 생성된 Object 데이터의 주소 값을 참조

     

    Heap

    모든 Object 타입이 Heap에 생성 

    : 동적으로 할당한 메모리 영역

     

     

    Garbage Collector 는 동적으로 할당한 메모리 영역  중 사용하지 않는 영역을 탐지하여 해제하면서 메모리를 관리 한다.

     

     

    과정

    1.  Garbage Collector 가 Stack의 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾는다.
    2.  참조되지 않는 객체(unrefernced objects) 를 마킹한다.
    3.  마킹된 객체는 삭제된다.

     

     

     

     

     

    이러한 GC가 수행 될 때 Heap에서는 아래 그림과 같은 영역으로 나뉘어 각자의 역할을 수행한다. 

     

    ※ GC는 Gabage Collection 의 줄임말이다.

     

    Young Generation

    • 새롭게 생성된 객체의 대부분은 eden 영역에 위치한다

     

    • 그러다 eden 공간이 꽉 찰 때 Minor GC 가 발생한다.
    • 이때 참조된 객체와 참조되지 않은 객체가 있는지 스캔하고 마킹한다.
    • eden 영역에서 Minor GC가.한번 발생한 후 살아남은 객체는 Survive 영역 중 하나로 이동한다.

    Stop the World Event - 모든 minor GC는 "Stop the Wrold" event 이다.

    stop the world 란, GC를 실행하기 위해 JVM이 애플리케이션을 멈추는 것을 말한다.

    stop the world 가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다.

    GC 작업을 완료한 이후에 중단 했던 작업을 다시 시작한다.

     

    • 이렇게 살아남은 객체들은 Survivor 영역에 계속 쌓이게된다.
    • 참조 되지 않은 객체 (unreferenced Object) 는 삭제 된다.
    • 하나의 Survivor 영역에 가득 차게 되면 그 중에서 살아남은 객체는 다른 Survivor 영역으로 이동한다.
    • 즉, Minor GC가 발생할 때, 객체들이 이동한다.

    • 살아남으면서 객체 Age 증가
    • 이 과정을 반복하다가 계속 해서 살아남아 있는 객체는 Old generation 영역으로 이동하게 된다.

     

     

     

     

    이러한 과정 중에 survivor 영역 중 하나느 반드시 비어 있는 상태로 남아 있어야 한다.

    만약 두 Survivor 영역에 모두 데이터가 존재하거나 , 두 영역 모두 사용량이 0이면 , 이 시스템은 정상적인 상황이 아니라고 보면 된다.

     

     

    Old Generation

    • 오랜 시간동안 객체가 살아 있으면 young generation 에서 이곳으로 이동한다.

    • 크기가 크기 때문에 young 영역보다 GC는 적게 발생한다.
    • 이 영역에서 객체가 사라 질 때 Major GC가 발생한다.

     

    Permanent Generation

    • 가비지 컬렉션 시에 필요한 클래스와 메소드의 요약 정보가 존재하는 영역

     

     

     

    REFERENCE

    https://www.youtube.com/watch?v=vZRmCbl871I   
    https://www.youtube.com/watch?v=Fe3TVCEJhzo
    https://d2.naver.com/helloworld/1329
    https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

     

    댓글

Designed by Tistory.