[java] 가비지 컬렉션의 동작 원리 이해
가비지 컬렉션은 자바의 핵심 기능 중 하나로, 메모리 관리를 자동으로 처리하여 프로그래머가 수동으로 메모리를 관리하거나 해제할 필요가 없도록 해줍니다. 이 글에서는 자바 프로그램의 메모리 관리를 가비지 컬렉션을 중심으로 살펴보고, 이 동작 원리에 대해 알아보겠습니다.
1. 메모리 영역
자바 프로그램은 메모리를 다섯 가지 영역으로 나누어 사용합니다.
- 힙(Heap): 동적으로 할당된 객체를 저장하는 영역
- 스택(Stack): 지역 변수 및 부분 결과 값을 저장하는 영역
- 메소드(Method): 클래스 수준의 정보(메소드, 상수 등)를 저장하는 영역
- 상수(Constant): 상수 값들을 저장하는 영역
- 네이티브(Native): 네이티브 코드를 위한 영역
2. 가비지 컬렉션
가비지 컬렉션은 힙 영역에서 사용하지 않는 객체를 파악하고 제거하는 프로세스입니다. 사용자가 명시적으로 객체 해제를 호출하지 않아도, 더 이상 참조되지 않는 객체를 찾아 제거하여 메모리를 최적화합니다.
가비지 컬렉션 프로세스의 단계는 크게 두 가지로 나눌 수 있습니다:
- 객체 참조 확인: 더 이상 참조되지 않는 객체를 확인
- 메모리 정리: 참조되지 않는 객체를 메모리에서 제거
3. 동작 원리
가비지 컬렉션은 가비지 컬렉터에 의해 자동으로 수행되지만, 사용자는 명시적으로 가비지 컬렉션을 요청할 수도 있습니다.
System.gc();
가비지 컬렉션은 두 가지 주요 알고리즘을 사용하여 메모리를 정리합니다:
- 참조 카운팅: 객체가 몇 개의 참조를 가지고 있는지를 카운트하여 참조가 없는 객체를 파악
- 메모리 관리 알고리즘: 객체 간의 참조와 참조 지역성을 분석하여 메모리를 최적화
결론
가비지 컬렉션은 자바의 핵심 기능으로, 메모리 관리를 자동으로 처리하여 프로그래머가 메모리 관리에 신경 쓰지 않아도 되게 해줍니다. 이로 인해 자바 프로그램의 안정성과 성능을 보장하여, 개발자가 핵심 로직에 집중할 수 있도록 도와줍니다.
References
- https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
감사합니다!