티스토리 뷰

Java

jvm 가비지 컬렉션

SonSeungWoo 2017. 3. 29. 14:52

가비지 컬렉션(이하 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)

'Java' 카테고리의 다른 글

static과 final의 사용  (0) 2017.06.28
자바7의 몇 가지 특징  (0) 2017.03.30
JAVA8에 대해 알아보자(2)  (0) 2017.03.29
JAVA8에 대해 알아보자(1)  (0) 2017.03.29
jvm 메모리  (0) 2017.03.29
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함