ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 Garbage Collection에 대한 개념
    Java 2023. 10. 8. 14:08

    Garbage Collection

    • 자바 가상 머신의 heap영역에서 동적으로 할당했던 메모리 중에 필요 없게 된 메모리 객체를 모아 주기적으로 제거하는 프로세스
    • 개발자는 메모리 관리, 메모리 누수 문제에 대해 관리하지 않아도 되어 오롯이 개발에만 집중할 수 있다.
    • 한번 사용하고 버려지는 객체들을 주기적으로 비워주면서 한정된 메모리를 효율적으로 사용
      • 예) 반복문 안에서 한번 선언되고 사용이 종료되는 객체들은 바로 비워준다.
    • Stop-The-World
      • 메모리가 언제 해제되는지 정확하게 알 수 없어 제어하기 힘들고 GC가 동작하는 동안에 다른 동작을 멈추기 때문에 오버헤드가 발생하는 단점이 있다.
      • GC가 작동하는 동안 GC 관련 Thread를 제외한 모든 Thread는 멈추게 되어 서비스 이용에 차질이 생길 수 있다.
      • 실시간 성이 매우 강조되는 포로그램일 경우 가비지 컬렉터(GC)에게 메모리를 맞기는 것은 맞지 않을 수 있다.

     

    Garbage Collection 대상

    • Unreachable 객체를 주기적으로 GC가 제거해준다.
      • Reachable : 객체가 참조되고 있는 상태
      • Unreachable  : 객체가 참조되고 있지 않은 상태 (GC의 대상이 됨) 
      • JVM 메모리에서는 객체들은 실질적으로 Heap영역에서 생성되고 Method Area이나 Stack Area 에서는 Heap Area에 생성된 객체의 주소만 참조하는 형식으로 구성된다.
      • Heap Area의 객체들이 메서드가 끝나는 등의 특정 이벤트들로 인하여 Heap Area 객체의 메모리 주소를 가지고 있는 참조 변수가 삭제되는 현상이 발생하면, Heap영역에서 어디서든 참조하고 있지 않은 객체(Unreachable)들이 발생하게 된다.

     

    Garbage Collection 방식 (Mark-Sweep)

    • 다양한 GC에서 사용되는 객체를 골라내는 내부 알고리즘

    • 가비지 컬렉션이 될 대상 객체를 식별(Mark)하고 제거(Sweep)하며 객체가 제거되어 파편화된 메모리 영역을 앞에서부터 채워나가는 작업(Compaction)을 수행
      • Mark : Root로부터 그래프 순회를 통해 연결된 객체들을 찾아내어 각각 어떤 객체를 참조하고 있는지 찾아 마킹
      • Sweep : 참조하고 있지 않는 객체(Unreachable 객체)를 Heap에서 제거
      • Compaction : Sweep 후 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로 압축한다.

     

     

    출처)

    https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B0%80%EB%B9%84%EC%A7%80-%EC%BB%AC%EB%A0%89%EC%85%98GC-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC

Designed by Tistory.