역할

  • 자바에서는 메모리를 GC라는 알고리즘을 통하여 관리한다.
  • 자바에서 쓰레기는 객체이다. 객체는 메모리를 점유하고 있으며, 필요가 없어진다면 메모리에서 제거되어야 한다.
  • 객체를 사용하는 메소드를 호출해서 특정 작업을 수행한다고 해보자. 메소드가 종료될때 사용했던 객체들은 GC에 의해 메모리에서 제거된다.
  • GC는 객체를 메모리에 할당하는 작업을 수행하며, 메모리중 사용중인 공간과 사용하지 않고 있는 공간을 찾을 수 있다.
  • GC가 더이상 사용하지 않는 공간을 찾을 수 없을때 객체를 메모리에 할당하려고 한다면 OutOfMemoryError이 발생한다.

JVM 메모리 구조

  • JVM의 메모리 구조는 크게 아래 4가지로 나뉜다. 이 중에서 GC는 힙 영역의 메모리만 관리한다.
    • 클래스
    • 스택
    • 네이티브 메소드

힙(Heap) 영역 살펴보기

  • GC가 관리하는 Heap 영역은 다시 Young, Old, Perm으로 나뉜다.
  • Perm 영역은 Application 단에선 사용하지 않고 JVM을 구동하는데 필요한 정보들을 담기위해 사용된다.
  • Young 영역은 다시 2개의 영역으로 나뉘는데 Eden과 Survivor로 나뉜다.

원리

  • 객체가 생성되면 일단 Eden 영역의 메모리에 올라간다.
  • Eden영역에 어느정도 데이터가 쌓이면, 데이터가 Survivor 영역으로 이동된다. ( 사용하지 않으면 그대로 삭제되기도 함 )
  • 더이상 Eden과 Survivor 영역에(합쳐서 Young 영역) 공간이 없다면 Old 영역으로 이동하는 방식이다.

참고

https://12bme.tistory.com/57