키워드 정리

  • 가비지 컬렉션은 메모리 관리방법, 이것을 수행하는게 가비지 컬렉터
  • 할당된 메모리가 더이상 참조되지 않을때 가비지 형태로 남는다
  • 자바의 경우 메모리를 더이상 할당할수 없을때 쓰레드가 잠시 멈춘후 GC를 실행한다
  • JVM 메모리는 클래스, 힙, 스택, 네이티브 메서드 스택 영역중 GC는 힙 메모리 영역 청소
  • 힙 메모리는 Young, Old, Perm 영역으로 나뉜다. Eden - Survivor - Old 영역순으로 객체의 메모리가 이동되고 청소

GC란?

가비지 컬렉션 줄여서 GC라고 불린다. 메모리 관리 방법 중 하나로, 시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 회수하는 것이다. 시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터라 부른다. GC를 지원하지 않는 언어는 메모리 해제까지 직접 해야한다. 이로인해 메모리 누수, 해제 했던 메모리를 재사용하는 버그가 양산된다.

할당된 메모리가 형변환 하거나 새롭게 선언되었을때 다른 곳을 가리키게 되면서 ‘가비지’ 라는게 발생한다. 이때 가비지 컬렉터의 역할은 사용되지 않는 메모리를 해제 시킨다.

자바의 경우 메모리가 부족해지는 순간이 오면 GC가 실행된다. 이때 Stop-the-world가 발생하는데 GC가 실행됐을때, 나머지 쓰레드는 작업을 일단 멈추는 현상이다. GC튜닝은 바로 이 시간을 줄이는 것을 뜻한다.

JVM 메모리 영역

JVM의 메모리는 클래스 영역, 자바 스택, 힙, 네이티브 메소드 스택 이렇게 4개 영역으로 나뉜다. 자바에서의 GC는 힙 메모리를 다루게 된다.

힙메모리 영역 청소 과정

hear_structure 힙메모리는 또 Young, Old, Perm 영역으로 나뉜다. Young 영역에서 발생한 GC를 Minor GC, 두 영역에서 발생한 GC를 Major GC라고 한다. 메모리에 객체가 생성되면 eden 영역에 객체가 지정된다. 데이터가 어느 정도 쌓이면 이 영역에 있던 객체가 다른 곳으로 옮겨지거나 삭제된다. 이때 옮겨가는 위치가 survivor space라 고 불린다. 그러다가 더 큰 객체가 생성되어 Young 영역에 공간이 남지 않으면 객체들은 Old 영역으로 이동하게 된다.