본문 바로가기

컴퓨터/JAVA

자바 고급 스터디 7. garbage collector

반응형

자바 고급 스터디 목록

공부 시간 : 2021/04/08 21:20 ~ 22:40 / 2021/04/11 11:00 ~ 11:40

7주차. gc의 동작원리와 gc가 언제 작동되는지 설명하세요.

garbage collector 이란?

가비지 컬렉션을 한마디로 표현하면, 사용하지 않는 메모리를 해제해주는 것이다. C, C++와 같은 언어들의 경우에 개발자가 직접 사용하지 않는 메모리가 어떤 것 인지 판단하여 해제하는 과정이 필요하다.
하지만 자바에서는 자바에서는 가비지 컬렉터가 사용하지 않는 메모리를 탐지하여 해제해준다.

garbage collector 사용시 얻을 수 있는 장점, 한계

장점

  1. 개발자가 직접 메모리 영역 전체를 컨트롤하지 않아도 됨.
  2. 잘못된 메모리 접근으로 발생하는 Crash 현상 방지 가능.
  3. 메모리 누수를 방지 할 수 있음.

한계

  1. 명시적으로 메모리를 해제하는 것 보다 메모리 해제속도가 느리다.
  2. 어떤 메모리를 해제할지 결정하는데 비용이 들어감.
  3. GC발생시 gc를 수행하는 쓰레드 이외는 모두 멈춘다. (Stop the World)
  4. stop the world로 인해 어플리케이션이 잠시 멈출 수 있다.
  5. gc가 언제 발생하는지(타이밍), 얼마동안 작동할지(점유시간)을 예측하기 어렵다.
  6. 위 한계로 인해 실시간으로 빠르게 정보를 반영해야 하는 시스템에는 적합하지 않다.

garbage collector 작동원리

가비지 컬렉터가 어떻게 작동되는지 알기위해서는 jvm 메모리의 Stack, Heap영역에 대해서 알아야한다.

Stack과 Heap에 대해 자세한 작동순서를 모른다면 먼저 jvm 메모리에 대해서 공부할 필요가 있다.

  1. 먼저 GC는 Stack에 있는 모든 변수를 스캔하며, 어떤 객체를 참조하고 있는지 찾고 마킹한다. (마킹된 객체는 Reachable Objects라고 부름.)
  2. 이미 마킹된 객체가 참조하고 있는 객체를 찾아 또 마킹한다.
  3. 1,2번 과정에서 마킹되지 않은 객체(Unreachable Objects)를 Heap에서 제거한다.

자세한 작동 순서

아래 영상에 정말 잘 설명되어 있어 자세한 설명은 링크 첨부로 대체함.

[10분 테코톡] 👌던의 JVM의 Garbage Collector

이미지

  • Minor GC
  1. new 연산자를 통해 객체가 Eden 영역에 저장됨.
  2. Eden 영역이 가득차면 Minor GC가 발생.
  3. Eden 영역에 Reachable Objects를 모두 Survivor1 영역으로 이동.
  4. Unreachable Objects만 남아있는 Eden 영역 clear.
  5. Survivor1 영역이 가득찰때 까지 2~4 반복
  6. Survivor1 영역이 가득차면 Survivor1 영역의 Reachable Objects를 모두 Survivor2 영역으로 이동.
  7. Unreachable Objects만 남아있는 Survivor1 영역 clear.
  8. Survivor2 영역이 가득찰때 까지 2~4 반복 (단 Reachable Objects를 survivor2 영역으로 이동시킴)
  9. 이후 위 작업이 Survivor1과 Survivor2를 번갈아가면서 계속 수행되고 시간이 지남에 따라 old 영역으로 이동된다.
  • Full GC
  1. Old 영역이 가득차면 Full GC가 수행됨.
  2. Old 영역을 모두 스캔하여 객체 마킹 후 해제 과정을 거침

참고 사이트 :

반응형