열심히 살아나갈 사람
Published 2023. 12. 7. 13:36
가비지 컬렉션(Garbage Collection) Java

가비지 컬렉션(Garbage Collection)이란?

자바의 가비지 컬렉션(Garbage Collection)은 자바의 메모리 관리 방법 중 하나로, 더 이상 사용되지 않는 메모리를 자동으로 회수하는 역할을 합니다. 이런 메모리 관리 방법은 프로그래머가 직접 메모리를 할당하거나 해제하는 일을 하지 않아도 되므로 메모리 누수나 해제되지 않은 메모리로 인한 문제를 방지할 수 있습니다.

가비지 컬렉션의 과정

자바의 가비지 컬렉션은 크게 4가지 단계로 이루어집니다.

  1. Marking: 가비지 컬렉터는 어떤 객체가 사용 가능한지(즉, 참조되고 있는지) 아닌지를 판별합니다. 더 이상 참조되지 않는 객체는 "가비지"로 표시됩니다.
  2. Normal Deletion: 표시된 가비지들은 메모리에서 제거됩니다. 이 과정에서 'Stop-The-World' 이벤트가 발생해 모든 애플리 케이션 스레드가 잠시 중단됩니다.
  3. Deletion with Compacting: 이 단계에서는 메모리의 연속성을 유지하기 위해 살아남은 객체들을 한쪽으로 이동시킵니다. 이로 인해 새로운 객체를 위한 연속적인 공간이 확보됩니다.
  4. Concurrent Mark and Sweep: 이 단계는 Marking와 Deletion 단계를 애플리케이션의 동작과 동시에 수행합니다. 이로 인해 애플리케이션의 성능 저하를 최소화할 수 있습니다.

자바의 주요 가비지 컬렉터들

  • Serial GC: 단일 스레드를 사용하여 가비지 컬렉션을 수행합니다. CPU 코어가 한 개인 시스템에 적합합니다.
  • Parallel GC: 여러 스레드를 사용하여 가비지 컬렉션을 수행합니다. 멀티 코어 CPU 시스템에 적합하며, Serial GC보다 빠르게 가비지를 처리할 수 있습니다.
  • Concurrent Mark Sweep (CMS) GC: 애플리케이션의 중단 시간을 최소화하려는 시스템에 적합합니다. 애플리케이션 스레드와 동시에 작동하며, 가비지 컬렉션 중에도 애플리케이션의 작동을 계속할 수 있습니다.
  • G1 GC: 큰 힙 메모리를 가진 시스템에 적합합니다. 힙을 여러 영역으로 나누고, 각 영역에서 가비지 컬렉션을 병렬로 수행합니다.

이 외에도 ZGC, Shenandoah 등의 가비지 컬렉터가 있으므로, 상황에 따라 적절한 가비지 컬렉터를 선택하는 것이 중요합니다.

'Java' 카테고리의 다른 글

Java Compile 순서  (0) 2023.12.10
인터페이스(Interface, implements)  (0) 2023.11.26
상속(extends)  (0) 2023.11.26
profile

열심히 살아나갈 사람

@쿼리_

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!