Computer Science

[객체지향프로그래밍] JAVA의 garvage collection 개념

imsunbow 2024. 6. 5. 22:21

자바의 가비지 컬렉션(Garbage Collection, GC)은 JVM(Java Virtual Machine)에서 자동으로 메모리를 관리하는 메커니즘이다. 가비지 컬렉터는 프로그램 실행 중 더 이상 사용되지 않는 객체들을 탐지하고 메모리에서 제거하여 메모리 누수를 방지하고, 응용 프로그램이 효율적으로 메모리를 사용할 수 있게 한다. 자바의 가비지 컬렉션은 몇 가지 특징을 가지고 있다.

 

먼저, 객체의 생성과 힙 메모리를 관리한다. 자바 프로그램에서 객체가 생성되면 힙 메모리에 할당된다. 힙 메모리는 프로그램이 실행되는 동안 동적으로 할당되는 메모리 영역이다. 객체가 더 이상 참조되지 않을 때, 즉 프로그램에서 해당 객체에 접근할 수 없게 되면 이 객체는 가비지(garbage)로 간주된다.

 

가비지 컬렉션은 마크 앤 스윕(Mark and Sweep) 과정으로 이루어진다. 이는 모든 객체를 탐색하여 어떤 객체가 살아 있는지(참조되는지)를 마크하고, 참조되지 않는 객체를 스윕하여 메모리에서 해제하는 방식이다. 또 다른 방식으로는 카피(Copying) 방법이 있는데, 메모리를 두 개의 영역으로 나누어 하나의 영역에서만 객체를 할당하고, 살아 있는 객체를 다른 영역으로 복사한 후 사용되지 않는 영역을 비운다.

젠네레이션(Generational) 방식도 있다. 이는 객체의 생존 시간을 기준으로 메모리를 여러 세대(generation)로 나누어 관리하는 방식이다. Young Generation, Old Generation(또는 Tenured Generation)으로 구분하며, Young Generation에서는 객체가 자주 생성되고 소멸되는 반면 Old Generation에서는 오래된 객체가 저장된다. 이 방식은 Young Generation에서 주로 GC가 발생하도록 하여 효율을 높인다. 또한, G1(Garbage First) 방식은 힙 메모리를 여러 영역으로 나누고, 각 영역에서 가비지를 수집하여 성능을 최적화하는 방식이다. 이 방식은 애플리케이션의 pause time을 줄이는 데 중점을 둔다.

 

[가비지 컬렉션 종류 및 튜닝]

 

가비지 컬렉션의 종류에는 Serial GC, Parallel GC, CMS (Concurrent Mark-Sweep) GC, G1 GC 등이 있다. Serial GC는 단일 스레드를 사용하여 가비지 컬렉션을 수행하는 가장 단순한 방식으로, 작은 애플리케이션에서 사용된다. Parallel GC는 여러 스레드를 사용하여 가비지 컬렉션을 병렬로 수행하여 멀티코어 시스템에서 성능을 향상시킨다. CMS GC는 애플리케이션의 pause time을 줄이기 위해 마크 및 스윕 단계를 병렬로 수행한다. G1 GC는 최신 가비지 컬렉터로, 힙 메모리를 여러 영역으로 나누고, 각 영역에서 가비지를 수집하여 성능을 최적화한다.

 

가비지 컬렉션의 튜닝은 JVM 옵션을 사용하여 수행할 수 있다. 예를 들어, -Xms와 -Xmx 옵션으로 힙 메모리의 초기 크기와 최대 크기를 설정할 수 있고, -XX:+UseG1GC와 같은 옵션으로 특정 GC 알고리즘을 사용할 수 있다.

요약하자면, 자바의 가비지 컬렉션은 자동 메모리 관리 메커니즘으로, 객체가 더 이상 필요 없을 때 메모리를 회수하여 효율적인 메모리 사용을 보장한다. 다양한 알고리즘과 튜닝 옵션을 통해 애플리케이션의 성능을 최적화할 수 있다.

반응형