본문 바로가기
프로그래밍/Java

[Java] Java의 GC(Garbage Collector)는 어떻게 동작할까

by 시간많은백수 2023. 10. 16.
반응형

Java의 가비지 컬렉터(Garbage Collector, 이하 GC)는 메모리 관리를 자동화하여 개발자가 메모리 누수와 메모리 관리에 대한 걱정을 줄이는 역할을 합니다. GC는 더 이상 사용되지 않는 객체를 식별하고 해제하여 메모리를 회수합니다. Java의 GC는 다양한 알고리즘과 방식으로 동작할 수 있으며, 주요 구성 요소 및 작동 방식에 대해 설명하겠습니다.

 

💡객체 생성

  • Java 프로그램에서 객체가 생성되면 메모리 힙(heap) 영역에 저장됩니다. 이 힙 영역은 Java 프로그램의 모든 객체 인스턴스를 저장하는 곳입니다.

💡 객체 참조

  • 객체는 변수나 다른 객체에 의해 참조됩니다. 객체가 더 이상 참조되지 않을 때 GC가 필요해집니다.

💡 Reachability(도달 가능성)

  • GC는 도달 가능한(reachable) 객체를 식별하고, 그렇지 않은 객체를 가비지로 표시합니다. 도달 가능한 객체는 어떠한 경로를 통해도 프로그램에서 접근할 수 있는 객체를 말합니다.

💡 GC 알고리즘

  • Java의 GC는 다양한 알고리즘을 사용하여 가비지 수집을 수행합니다. 일반적으로 사용되는 알고리즘에는 다음이 있습니다
    • Serial GC: 단일 스레드로 동작하며 작은 애플리케이션에 적합합니다.
    • Parallel GC: 다중 스레드를 활용하여 가비지 수집을 병렬로 수행합니다. 대규모 애플리케이션에 적합합니다.
    • Concurrent Mark-Sweep (CMS) GC: 프로그램 실행과 병행하면서 가비지 수집을 수행합니다. 일시 중지 시간을 최소화하는 데 중점을 둡니다.
    • G1 (Garbage-First) GC: 힙 영역을 여러 영역으로 분할하고 목표를 가지고 최적화된 가비지 수집을 수행합니다.

💡 GC 동작 단계

  • GC는 크게 세 가지 단계로 동작합니다.
    • Mark(표시): 도달 가능한 객체를 식별하고 표시합니다.
    • Sweep(청소): 가비지로 표시된 객체를 메모리에서 제거합니다.
    • Compact(압축): 객체를 메모리 상에서 조각난 공간을 정리하고 메모리 힙을 최적화합니다. 이 단계는 모든 GC 알고리즘에서 수행되지는 않습니다.

💡 GC 튜닝

  • Java 애플리케이션은 다양한 요구 사항과 환경에서 실행되므로 GC 동작을 튜닝하는 것이 중요합니다. 이를 통해 애플리케이션 성능을 최적화할 수 있습니다.

💡 GC 종류

  • Java에서는 다양한 GC 구성 및 옵션이 제공됩니다. 이를 사용하여 애플리케이션의 요구 사항에 맞게 GC를 설정할 수 있습니다.

💡 Weak Reference(약한 참조)

  • GC는 약한 참조(Weak Reference)를 사용하여 객체가 도달 가능한지 여부를 판단합니다. 약한 참조는 참조 계수를 증가시키지 않으며 객체의 수명을 제어하는 데 도움이 됩니다.

Java의 GC는 Java Virtual Machine(JVM)의 일부로 동작하며, 개발자는 일반적으로 직접 GC를 제어할 필요가 없습니다. 그러나 대규모 및 특수한 애플리케이션에서는 GC 동작을 이해하고 튜닝하는 것이 성능 최적화에 중요합니다.

 

반응형