ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • jvm 가비지 컬렉션
    카테고리 없음 2023. 4. 18. 12:31

    가비지 컬렉션(이하 GC)

    GC 의 과정

    • GC에 대해서 알아보기전 알아야 용어가 있다. 바로 stop-the-world이다. stop-the-world란 GC를 실행하기 위해 JVM이 어플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. 대게의 경우 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다.

    • 자바는 프로그램 코드에서 메모리를 명시적으로 해제하지 않는다. 가끔 명시적으로 해제하려고 해당 객체를 null로 지정하거나 System.gc() 메서드를 호출하는 개발자가 있다. null로 지정하는 것은 큰 문제가 안되지만 System.gc() 메서드를 호출하는 것은 시스템의 성능에 큰 영향을 끼치므로 자제 해야 된다.

    • 오라클의 HotSpot VM에서는 크게 2개의 물리적 공간으로 나뉜다. Young 영역Old 영역이다. 1. Young 영역(Yong Generation 영역)

      • 새롭게 생성한 객체의 대부분이 여기에 위치한다. 대부분의 객체가 금방 접근 불가능 상태가 되기 때문에 많은 객체가 여기서 생성되었다가 사라진다. 이 영역에서 객체가 사라질 때 Minor GC가 발생한다고 한다. 2. Old 영역(Old Generation 영역)
      • 접근 불가능 상태로 되지 않아 Young 영역에서 살아남은 객체가 여기로 복사된다. 대부분 Young 영역보다 크게 할당되며, 크기가 큰 만큼 Young 영역보다 GC는 적게 발생한다. 이 영역에서 객체가 사라질 때 Major GC(혹은 Full GC)가 발생한다고 한다.
    • 위 그림의 Permanent Generation 영역(이하 Perm 영역)은 Method Area라고도 한다. 객체나 억류(intern)된 문자열 정보를 저장하는 곳이며, Old 영역에서 살아남은 객체가 영원히 남아 있는 곳은 절대 아니다. 이 영역에서 GC가 발생할 수도 있는데 여기서 GC가 발생해도 Major GC의 횟수에 포함된다.

    Young 영역의 구성

    • Young 영역은 3개의 영역으로 나뉜다.
      1. Eden 영역
      2. Survivor 영역(2개)
    • Survivor 영역이 2개이기 때문에 총 3개의 영역으로 나뉜다. 각 영역의 처리 절차 순서를 기술하면 다음과 같다.

      1. 새로 생성한 대부분의 객체는 Eden 영역에 위치한다.
      2. Eden 영역에서 GC가 한번 발생한 후 살아남은 객체는 Survivor 영역 중 하나로 이동된다.
      3. Eden 영역에서 GC가 발생하면 이미 살아남은 객체가 존재하는 Survivor 영역으로 객체가 계속 쌓인다.
      4. 하나의 Survivor 영역이 가득차게 되면 그 중에서 살아남은 객체를 다른 Survivor 영역으로 이동한다. 그리고 가득 찬 Survivor 영역은 아무 데이터도 없는 상태로 만든다.
      5. 이 과정은 반복하다가 계속해서 살아남아 있는 객체는 Old 영역으로 이동하게 된다.
    • 이 절차를 확인해 보면 알겠지만 Survivor 영역 중 하나는 반드시 비어 있는 상태로 남아 있어야 한다. 만약 두 Survivor 영역에 모두 데이터가 존재하거나, 두 영역 모두 사용량이 0이라면 정상적인 상황이 아니라고 생각된다.

    • Eden 영역에 최초로 객체가 만들어지고, Survivor 영역을 통해서 Old 영역으로 오래 살아남은 객체가 이동한다는 사실은 꼭 기억하자!!

    출처 : hello naver(http://d2.naver.com/helloworld/1329)

    댓글

Designed by Tistory.