ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Garbage Collector 이해
    Computer Science 2020. 12. 1. 01:59

    JVM

    운영체제 메모리영역에 접근하여 메모리를 관리하는 프로그램

     

    GC

    동적으로 할당된 메모리의 사용하지 않는 영역을 해제하는 기능

     

    Stack

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

    원시타입 데이터 값을 할당

    Heap영역에 생성된 Object 타입의 데이터 참조

     

    Heap

    동적으로 할당된 메모리 영역

    모든 Object 타입의 대에티가 할당

    Heap 영역의 object를 가리키는 참조변수가 stack에 할당

     

    main(){

    int a = 10;

    int b = 20;

    int sum = a+b;

    String text = "던";

    }

    main() 메서드가 실행될때 a, b, sum 변수는 스택메모리에 할당이됩니다. text의 참조값도 스택매모리에 할당됩니다.

    heap 메모리에는 text의 참조변수가 할당이 됩니다.

     

    main() 메서드가 실행이 종료된 이후에는 stack 매모리에 있는 변수가 모두 해제됩니다.

    이때 heap 메모리에 있는 "던"은 Unreacable Object가 되어 GC의 대상이 됩니다.

     

    GC의 과정 - Mark And Sweap

    1. GC각 Stack의 모든 변수를 스캔하면서, 각각 어떤 객체를 참조하고 있는지 찾아서 마킹

    2. Reachable Object가 참조하고 있는 객체도 찾아서 마킹

    3. 마킹되지 않은 객체를 Heap에서 제거

    참조되고 있지 않은 객체를 찾아서 마킹 후 삭제

    이러한 과정을 Mark And Sweap(쓸어내린다) 이라고 함

     

     

     

    GC는 언제 일어나는가?

    Heap

    New Generation

    • 새로운 객체는 Eden영역에 할당된다.
    • Eden영역에서 메모리가 사용이 되었으면, Minor GC 발생
    • Eden 영역의 Unreachable 객체는 메모리에서 해제
    • Eden에서 살아남은 객체는 Survival 0 영역으로 이동된다.
    • 이러한 과정을 반복한 끝에 Survival 0 영역이 다 차게 되면,  Mark And Sweap 과정을 수행한다.
    • 이후 Survival 0 영역에 있던 객체를 Survival 1 영역으로 이동하고, 이동한 객체는 Age 값 증가
    • 새로 생성된 객체는 Eden에 할당되고, 살아남은 객체는 Suvival 1영역으로 이동

     

    • Survival0과 Survival1 중 하나의 영역은 항상 비어 있음.!
    • Survival 영역의 Mark And Sweap에서 살아남은 객체는 Age값을 증가 시키며 다른 영역으로 이동함.
    • 새로운 객체는 Eden 영역에 할당됨.
    • 이러한 과정을 반복하다가, Age 값이 특정값 이상이 되면, Old Generation 영역으로 옮겨진다.
    • 이 과정을 Promotion 이라고 한다.

     

    Old Generation 영역이 가득 차면, GC가 실행된다.

    이때 발생되는 GC를 Major GC라고 한다.

     

     

    GC 종류

    1. Serial GC

    GC를 처리하는 스레드가 1개이다.

    CPU 코어가 1개만 있을 때 사용하는 방식

    Mark-Compact collection 알고리즘 사용

    Mark + Sweap + Compact 

    GC를 수행하며 메모리가 해제된 후, 중간에 공간을 없애고 한 곳에 밀어넣는다.

    메모리 파편화 방지

    2. Parallel GC

    GC를 처리하는 스레드가 여러 개이다.

    Serial GC보다 빠르게 객체를 처리할 수 있다

    Parallel GC는 메모리가 충분하고, 코어의 개수가 많을 때 사용하면 좋다

     

    3. Concurrent Mark Sweep GC (CMS GC)

    stop-the-world 시간이 짧다

    어플리케이션 응답 시간이 빨라야 할 때 cms gc를 사용한다.

    다른 gc 방식보다 메모리와 cpu를 더 많이 사용한다.

    Compaction 단계가 제공되지 않는다

     

    4. G1 GC

    각 영역을 Region 영역으로 나눈다.

    GC가 일어날 때, 전체영역을 탐색하지 않고, 특정 영역만 탐색하여 STOP-THE-WORLD의 시간을 줄인다.

    바둑판의 각 영역의 객체를 할당하고, GC를 실행한다

    그러다가 해당영역이 꽉차면 다른 빈영역에 객체를 할당하고 GC를 실행

    Compaction을 사용한다.

     

    Stop The World

    GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다.

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

    gc 작업을 완료한 이후에 중단한 작업을 다시 시작한다

     

     

    www.youtube.com/watch?v=vZRmCbl871I

     

     

    'Computer Science' 카테고리의 다른 글

    의존성 주입(Dependecy Injection) 이란?  (0) 2020.12.17
    커널(Kernel)  (0) 2020.12.09
    PNG와 JPG 파일 차이  (0) 2020.11.30
    메모리 영역  (0) 2020.09.24
    Process와 Thred  (0) 2020.09.24
Designed by Tistory.