Garbage Collector

hyyyynjn·2021년 4월 25일
0

자바 스터디

목록 보기
9/15
post-thumbnail
  • gc의 동작원리와 gc가 언제 작동되는지 설명하기

Garbage

🤚 Garbage

  • 정리되지 않은 메모리 (주소를 잃어버려서 사용할 수 없는 메모리)
  • 유효하지 않은 메모리 주소
  • 앞으로 사용하지 않고 메모리를 가지고 있는 객체

프로그래밍 언어에서는 Danling Object, 자바에서는 Garbage라고 부른다

예시

String[] array = new String[2];

array[0] = '0';
array[1] = '1';

array = new String[] {'G', 'C' };

할당한 0과 1은 String 배열이 할당되어 주소를 잃어버린 Garbage 이다.

Garbage Collector (GC)

🤚 Garbage Collector

  • 메모리가 부족할때 Garbage를 메모리에서 해제시켜 다른 용도로 사용할 수 있게 해주는 프로그램이다.
  • Java에서 객체가 생성되면 해당 객체는 JVM의 Heap 영역의 메모리를 점유한다. 해당 객체가 현재 참조되지 않더라도 메모리 공간을 점유한다. 객체가 점유한 공간을 JVM에서 자동으로 정리하는 역할의 프로세스이다.
  • Java에서는 개발자가 프로그램 코드로 메모리를 명시적으로 해제(System.gc() 메서드를 호출)하지 않기 때문에 GC가 더 이상 필요 없는 (Garbage) 객체를 찾아 지우는 작업을 한다

🤚 stop-the-world

  • GC를 실행하기 위해 JVM이 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드를 멈추고 GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다.
  • stop-the-world 시간을 줄이는 GC 튜닝을 하기도 한다.

GC가 만들어지게 된 두가지 가설(전제 조건)

🤚 weak generational hypothesis : GC가 만들어지게 된 두가지 가설(전제 조건)

  1. 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다
  2. 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다

weak generational hypothesis 가설의 장점을 최대한 살리기 위해서 HotSpot VM에서는 크게 2개로 물리적 공간을 나누었다.

JVM의 heap 영역

🤚 HotSpotVM의 나뉘어진 2개의 물리적 공간

  1. Young 영역 (Young Generation 영역)

    • 새롭게 생성한 객체가 위치해 있는 영역이다.
    • 대부분의 객체가 근방 접근 불가능한 상태가 되기에 많은 객체가 Young 영역에 생성되었다가 사라진다.

    👉 Young 영역에서 객체가 사라질 때 Minor GC가 발생한다고 말한다.

  2. Old 영역 (Old Generation 영역)

    • 접근 불가능 상태로 되지 않아 Young 영역에서 살아남은 객체가 Old 영역에 복사된다.
    • 대부분 Young 영역보다 크게 할당하기 때문에 Young 영역보다 GC는 적게 발생한다.

    👉 Old 영역에서 객체가 사라질 때 Major GC(Full GC)가 발생한다고 말한다.

🤚 Perm 영역 (Permanent Generation 영역)

  • 객체나 억류(intern)된 문자열 정보를 저장하는 곳이다.
  • 이름 뜻 그대로 Old 영역에서 살아남은 객체가 영원히 남아 있는 곳은 절대 아니다.

👉 Permanent Generation 영역에서 GC가 발생하면 Major GC의 횟수에 포함된다.

카드 테이블(Card Table)

  • Old 영역에 있는 객체가 Young 영역의 객체를 참조하는 경우, 카드 테이블에 정보가 표시된다.
  • Minor GC를 빠르게 할 수 있도록 하는 장치인 write barrier을 사용하여 카드 테이블을 관리한다. (약간의 오버헤드는 발생하지만, 전체적인 GC시간이 줄어든다)

👉 Young 영역의 GC를 실행할 때, 이 카드 테이블만 뒤져서 GC 대상인지 식별한다 (Old 영역에 있는 모든 객체의 참조를 확인하지 않는다.)


0개의 댓글