자바에서 Garbage Collector는 메모리 관리를 자동으로 수행하는 시스템으로 더 이상 사용되지 않는 객체를 자동으로 검출하고 메모리를 해제하는 역할을 합니다.
1. 객체 식별
가비지 컬렉터는 먼저 사용 중인 객체와 사용되지 않는 객체를 구분해야 합니다. 이 과정에서 도달 가능성 분석을 수행하여, 루트 집합에서부터 시작해 참조를 따라갈 수 있는 객체를 식별합니다. 루트 집합은 메소드 영역에 있는 클래스, 스택 영역의 지역 변수, 네이티브 스택의 JNI 참조 등에서 참조하는 개체들을 포함합니다. 참조할수 있는 경로가 있는 객체는 '도달 가능한 객체'로 분류되며, 그렇지 않은 객체는 가비지로 간주됩니다.
2. 가비지 수집
도달할 수 없는 객체들이 식별되면, 가비지 컬렉터는 이들 객체가 차지하고 있는 메모리를 회수합니다. 이 과정에서 여러 가비지 컬렉션 알고리즘에 따라 다를 수 있으며, 일반적으로 Martk-and-Sweep, Copying, Mark-and-Compact 등의 방법이 사용됩니다.
3. 최적화
메모리를 회수한 후에는, 메모리 내의 조각을 최소화하고 프로그램의 성능을 유지하기 위한 최적화 작업이 이루어집니다. 예를 들어, 객체들을 메모리의 한 부분으로 이동시켜 메모리 할당과 접근 속도를 개선할 수 있습니다.
4. 실행
가비지 컬렉터는 일반적으로 프로그램의 실행을 일시 중지시키는 Stop-the-World 이벤트를 발생시킬 수 있습니다. 이는 가비지 컬렉션을 안전하게 수행하기 위해 모든 애플리케이션 스레드를 잠시 중지시키는 것을 말합니다. 컬렉션 후에는 중지했던 스레드를 다시 실해앟여 프로그램이 계속 동작하게 됩니다.
가지비지 컬렉터의 장점
자동화된 메모리 관리 덕분에 자바 개발자들은 메모리 할당 및 해제에 신경 쓸 필요 없이, 애플리켕션 로직 개발에 집중할 수 있습니다. 이는 특히 메모리를 직접 관리해야 하는 C/C++과 같은 언어에 비해 큰 장점입니다.
'IT > Java' 카테고리의 다른 글
JPA 소개 (1) | 2025.01.02 |
---|---|
Spring Rest Controller, Spring MVC와 비교 (1) | 2024.12.02 |
자바 객체의 생명주기 (0) | 2024.12.02 |
Spring Container가 관리하는 Bean에 대하여 (1) | 2024.12.02 |
Java, 배열의 조작을 도와주는 Arrays (0) | 2024.11.22 |