Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[Java] GC(가비지 콜렉터, Garbage Collector) 본문

Java

[Java] GC(가비지 콜렉터, Garbage Collector)

코드와이 2021. 11. 28. 21:18

Garbage Collector

  • 가비지(Garbage)란?
    • 정리되지 않은 메모리
    • 유효하지 않은 메모리 주소
    • int[] arr = new int[1];
      arr[0] = 3;
      
      arr = new int[] {1};
      위 코드에서 처음에 할당한 3을 가비지라고 부른다.
    • 앞으로 사용하지 않고 메모리를 가지고 있는 객체 또한 가비지라고 부른다.
    • 메모리가 부족할 때 이런 가비지들을 메모리에서 해제시켜 다른 용도로 사용할 수 있게끔 해주는 프로그램
  • C++과의 차이점
    • C++ : 사용하지 않을 객체의 메모리를 직접 해제
    • Java : GC가 자동으로 잡아줌
  • Stop The World
    • GC 실행을 위해 JVM이 애플리케이션 실행을 멈추는 것
    • GC가 실행될 땐 GC를 실행하기 위한 쓰레드를 제외한 모든 쓰레드가 멈추고, GC 작업이 완료된 후에 다시 작업을 시작
    • GC 튜닝 => stop the world 시간을 줄이는 것
  • GC 과정(= Mark and Sweep)
    • Mark
      • GC가 스택의 모든 변수 또는 Reachable 객체를 스캔하면서 각각 어떤 객체를 참조하는지 찾는 과정
      • Stop the world 발생
    • Sweep
      • 이후 Mark 되어있지 않은 객체들을 힙에서 제거하는 과정
  • Minor GC와 Major GC
    • JVM의 Heap은 Young, Old, Perm으로 나뉨
    • Young : Minor GC
      • 새롭게 생성한 객체가 위치
      • 대부분의 객체가 금방 접근 불가능 상태가 되기 때문에 매우 많은 객체가 Young에 생성되었다가 사라진다. 이를 Minor GC가 발생한다고 한다.
    • Old : Major GC
      • Young에서 살아남은 객체가 여기로 복사된다.
      • Young 영역보다 크게 할당되며, 크기가 큰 만큼 Young 영역보단 GC가 적게 발생
    • Perm : Major GC
  • Reachability
    • GC가 가비지 객체인지 판별하기 위한 개념
    • unreachable 객체를 가비지로 간주
    • 바꿔말해 Reachability를 제어할 수 있으면 GC에 일부 관여하는 것이 가능
  • Default GC
    • Java 9, 10 : G1GC
      • 더 짧은 주기의 FUll GC 작업을 수행하여 전체적인 처리량이 줄어드는 대신 일시 정지 시간을 크게 단축
    • Java 7, 8 : ParallelGC
      • Old Generation 영역에서만 Full GC 수행 
  • Reference

'Java' 카테고리의 다른 글

[Java] Java & 객체지향  (0) 2021.11.28