가비지 컬렉션이란?
-
Garbage Collection
은 프로그램에서 동적으로 할당된 메모리 중에서 더 이상 사용되지 않는 메모리를 자동으로 찾아 해제하는 프로세스이다. 자바와 같은 언어에서 메모리 관리의 중요한 기능 중 하나로, 더 이상 사용되지 않는 객체를 자동으로 탐지하고 해제해 메모리 누수를 방지하는 메커니즘.
- 자바에서는 직접 메모리를 해제할 필요 없이, JVM(Java Virtual Machine)이 자동으로 메모리를 관리해 줌.
- 가비지 컬렉션은 JVM의 힙 메모리에서 수행된다.
가비지 컬렉션의 필요성
- 메모리 누수 방지: 프로그램이 실행되는 동안 더 이상 필요하지 않은 객체를 해제해 메모리 누수 방지
- 메모리 관리 단순화: 개발자가 직접 메모리를 관리하지 않아도 되므로, 메모리 관리가 단순해지고 오류가 줄어든다.
가비지 컬렉션 동작 원리
- 마킹(Marking): 가비지 컬렉터는 루트 객체에서 시작하여 접근 가능한 모든 객체를 탐색하고, 접근 가능한 마크를 표시
- 스위핑(Sweeping): 마킹 단계에서 표시되지 않은 객체는 가비지로 간주되어 메모리에서 해제(sweep)된다.
- 컴팩팅(Compactiong): 해제된 메모리 공간을 정리하여 메모리를 단편화를 방지하고, 남아있는 객체를 연속된 메모리 공간으로 이동시켜 메모리 할당을 최적화 한다.
가비지 컬렉션의 종류
- Serial Collector: 단일 스레드를 사용하여 가비지 컬렉션을 수행. 작은 애플리케이션에 적합
- Parallel Collector: 여러 개의 스레드를 사용해 가비지 컬렉션을 병렬로 수행한다. 대규모 애플리케이션에 적합
- CMS(Concurrent Mark-Sweep) Collector: 가비지 컬렉션 중 애플리케이션의 중단 시간을 최소화하는 것을 목표로 함
- G1(Garbage-First) Collector: 큰 힙 메모리를 효율적으로 관리하며, 짧은 중단 시간을 유지.
- ZGC(Z Garbage Collector): 매우 큰 힙에서 짧은 중단 시간을 유지하는 최신 가비지 컬렉터
ex) 가비지 컬렉션 a = 64-1; b = 49-2; a = b; a = 49-2; 64-1은 참조하지 않음 (가비지 대상)
→ 가비지 컬렉션은 자바의 메모리 관리에서 중요한 역할을 한다. 이를 통해 메모리 누수를 방지하고, 개발자가 직접 메모리를 관리하지 않아도 되므로 프로그래밍의 복잡성을 줄여준다. 다양한 가비지 컬렉션 알고리즘과 가비지 컬렉터를 통해 다양한 애플리케이션의 요구사항을 충족할 수 있다.
Share article