본문 바로가기
Java

Java의 Garbage Collection

by creatingeveryday 2022. 10. 29.

Garbage Collection 이란?

  • 소개
    • JAVA 개발자는 직접 메모리를 할당하고 해제하지 않는다.
    • JVM의 Garbage Collector 가 사용하지 않고 참조되지 않는 Heap 영역의 객체를 자동으로 정리해준다.
    • GC를 이해하기 위해서는 JVM의 메모리 구조와 동작 방식도 이해해야한다. 글을 읽어보니 매우 밀접하게 관련되어있음. 더 공부해야할 것 같다.

<기본적인 작업 순서>

1.힙 영역의 객체들 중 접근불가능한(unreachable) Garbage 객체를 찾는다.

2. 찾아낸 객체를 정리하여 힙의 메모리를 회수한다. 쓰레기 객체를 정리하여 한정된 메모리를 효율적으로 사용할 수 있다.

  • 이 과정에서 GC를 실행시 쓰레드를 제외한 나머지 쓰레드는 작업을 멈추고 대기한다. (Stop-the-world)
  • 멈추는 시간을 최소화 하기 위해 Garbage Collector를 튜닝할 수도 있다.
  • 정리하는 방법은 다양함. 여러 알고리즘이 존재하며 개선되어가는 중임.
  • GC 알고리즘
    • 단순무식하게 힙 영역의 모든 객체를 검사하는 방법도 사용은 가능하겠지만 현실적으로 매우 비효율적인 방법이다.
    • 이렇게 비효율적인 방법을 사용하지 않기 위해 경험적으로 관찰된 속성으로 가설을 가정하였고 그 중에 가장 중요한 가설은 약한 세대 가설(weak generational hypothesis)이다. 
      • 약한 세대 가설은 대부분의 객체는 짧은 시간 동안만 생존하고 금방 접근불가능한 객체가 되고 오래된 객체에서 젊은 객체로의 참조는 매우 적게 존재한다는 가설이다.

 

대부분의 객체는 빠른 시간 내에 접근 불가능한 쓰레기 객체가 된다.

 

 

 

이 가설을 받아들인다면 대부분의 객체가 힙 영역에 생긴 후 빠른 시간 안에 쓰레기(참조할 수 없는 객체)가 되므로 힙 메모리 구조 자체를 논리적으로 세대 단위로 구분하여 관리하여 보다 효율적인 GC를 수행할 수 있다.

 

 

 

  • GC 알고리즘의 종류
    • Serial GC
    • Parallel GC
    • Parallel old GC
    • Concurrent Mark & Sweep GC (CMS)
    • Garbage First GC (G1)

'Java' 카테고리의 다른 글

자바8 날짜 및 시간 API 간략 정리  (0) 2024.02.18

댓글