티스토리 뷰

study

JVM과 GC

soo__ 2022. 4. 28. 22:00

Garbage Collector

  • Java에서는 개발자가 프로그램 코드로 메모리를 명시적으로 해제하지 않기 때문에 Garbage Collector가 더 이상 필요 없는 Garbage 객체를 찾아 지우는 작업을 한다
  • 수행 과정
    1. Heap 내의 객체 중에서 Garbage(GC 대상 객체)를 찾아낸다
    2. 찾아낸 Garbage(GC 대상 객체)를 처리(finalization)해서 할당되었던 Heap의 메모리를 회수한다
  • 전제 조건
    • 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다
    • 오래된 객체(Old Generation)에서 젊은 객체(Young Generation)로의 참조는 아주 적게 존재한다
      • Young 영역(Yong Generation 영역): 새롭게 생성한 객체의 대부분이 여기에 위치한다. 대부분의 객체가 금방 접근 불가능 상태가 되기 때문에 매우 많은 객체가 Young 영역에 생성되었다가 사라진다. 이 영역에서 객체가 사라질때 Minor GC가 발생한다고 말한다
         eden, S0, S1 (Survivor space) 영역으로 나뉜다
      • Old 영역(Old Generation 영역): 접근 불가능 상태로 되지 않아 Young 영역에서 살아남은 객체가 여기로 복사된다. 대부분 Young 영역보다 크게 할당하며, 크기가 큰 만큼 Young 영역보다 GC는 적게 발생한다. 이 영역에서 객체가 사라질 때 Major GC(혹은 Full GC)가 발생한다고 말한다
      • 참고 링크
  • 최초의 Java에서는 GC 작업에 애플리케이션의 사용자 코드가 관여하지 않도록 구현되었었으나, JDK 1.2부터는 제한적으로 사용자 코드와 GC가 상호작용할 수 있도록 한다
    → java.lang.ref 패키지
    • 객체의 reachability를 조절하여 Java GC에 일부 관여할 수 있도록 도와준다
      (java.lang.ref 패키지의 SoftReference, WeakReference, PhantomReference, ReferenceQueue 등을 사용하여)

 

reachability란?

  • 객체가 Garbage인지 판별하기 위해 사용하는 개념
  • 어떤 객체에 유효한 참조가
    • 있으면 'reachable'
    • 없으면 'unreachable'로 구별
  • unreachable 객체를 Garbage로 간주해 GC 수행
  • java.lang.ref 패키지를 이용해, 이 reachable 객체들을 strongly reachable, softly reachable, weakly reachable, phantomly reachable로 더 자세히 구별하여 GC 때의 동작을 다르게 지정할 수 있다

 

stop-the-world

  • GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것
  • stop-the-world가 발생하면 GC를 실행하는 Thread를 제외한 나머지 Thread는 모두 작업을 멈춘다
    GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작
  • OLD 영역은 크기가 크기 때문에 stop-the-world 시간이 길고, YOUNG 영역은 minor GC가 자주 발생하지만 영역이 작기 때문에 처리속도가 빠르다
  • 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다
  • GC 튜닝이란 이 stop-the-world 시간을 줄이는 것!

 

'study' 카테고리의 다른 글

map() 과 flatMap()  (0) 2022.05.17
ConcurrentHashMap  (0) 2022.05.03
Builder 패턴  (0) 2022.04.27
Stateless vs Stateful  (0) 2022.04.22
Memcached vs Redis  (0) 2022.04.22
공지사항
«   2025/07   »
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