Garbage Collector의 역할, 원리, 알고리즘에 대해 아는 만큼 설명해주실 수 있을까요?
자바 어플리케이션은 JVM 위에서 구동되는데, Java의 가비지 컬렉터는 Java Virtual Machine (JVM)에 있습니다.
메모리 영역에 저장되는 객체들이 계속해서 쌓이게되면 메모리에 공간이 부족해지는 현상이 발생하여, 이를 방지하기 위해 주기적으로 사용하지 않는 객체를 수집하여 제거해줘야합니다.
GC의 주요 역할은 자동 메모리 관리로 자동적으로 더이상 사용하지 않는 객체를 청소하여 메모리 공간을 확보하는 작업을 해주는 역할을 합니다.
이에 따라 개발자는 메모리 관리를 신경쓰지 않고 더 안정적이고 효율적인 코드를 작성하는 데 집중할 수 있습니다.
GC는 대표적으로 Mark & Sweep 알고리즘을 사용합니다. Reachability Analysis라는 분석을 통해 사용되고 있는 객체, 사용되지 않는 객체를 분류하게 됩니다. 여기서 사용되는 객체들은 Mark로 사용중임을 표시하고, 사용되지 않는 객체는 가비지로 분류하여 Sweep을 통해 메모리에서 해제하며 공간을 확보합니다.
추가질문
G1 Collector에 대해서 들어본적이 있나요? 아는부분까지만 설명이 가능할까요?
Java의 가비지 컬렉션 알고리즘은 여러 가지가 있고, JDK의 버전에 따라 새로운 알고리즘이 추가되거나 변경되어 왔습니다. 그 중 대표적인것은 G1 (Garbage-First) Collector라는 알고리즘입니다. JDK 9에서부터 G1이 "기본 GC"로 지정되었습니다.
G1 컬렉터는 Young, Old 영역을 관리하는 효율적인 가비지 컬렉션 알고리즘입니다. Young 영역과 Old 영역은 객체의 생명 주기와 가비지 컬렉션과 연관이 있습니다.
추가질문
각 영역은 어떤것인지 설명 할 수 있을까요?
Young영역 :
우선 Young 영역은 새롭게 생성된 객체가 할당되는 영역입니다.
그 안에는 Eden영역, Survivor영역으로 구분됩니다.
자바 객체가 생성되면 처음에 Eden 영역에 저장됩니다.
Eden 영역이 꽉차면 Mark(참조 여부 식별), Sweep(메모리 해제) 과정이 일어나고 Minor GC가 발생합니다.
Minor GC가 발생할때 사용중인 객체만 Survivor1 영역으로 이동하고 eden은 비워집니다.
또 새로운 객체가 생성되면 다시 Eden 영역에 할당됩니다. 이번에도 영역이 꽉 차면 Minor GC발생과 함께 Survivor1의 생존된 객체와 Eden의 생존된 객체가 Survivor2로 복사되고 eden, survivor1은 비워집니다.
이 과정을 반복하며 생존된 객체만 남게 됩니다. 생존 횟수는 객체들이 생존할때마다 age가 증가하며, 특정 age값 이상이 되면 Survivor 영역에서 오래된 객체는 Old 영역으로 옮기게됩니다.
Old영역 :
Young영역에서 Reachable 상태를 유지하여 살아남은 객체가 복사되는 영역입니다.
Old 영역은 Young 영역보다 크게 할당되며, 크기가 큰 만큼 가비지는 적게 발생합니다. 해당 영역이 가득 차면 Major GC가 발생하고 Young영역과 마찬가지로 Mark & Sweep 알고리즘을 사용합니다. Old 영역에서의 가비지 컬렉션은 전체 힙을 대상으로 하는 Major GC 또는 Full GC로도 알려져 있습니다.
Old 영역에서의 가비지 컬렉션은 애플리케이션의 힙 영역에서 오래된 객체들을 효과적으로 관리하여 메모리 누수를 방지하고, 오랜 기간 동안 실행 중인 애플리케이션에서의 안정성과 성능을 유지하는 데 기여합니다.
추가질문
그 외 Metaspace라는 영역이 있는것을 알고있나요? 혹시 들어본적이 있으면 어떤것인지 설명 할 수 있을까요?
추가적으로 Metaspace는 클래스 로딩과 언로딩에 관한 클래스 메타데이터의 동적인 관리에 집중된 공간으로 알고 있습니다.
OS가 자동으로 크기를 조절하는 영역이며 Metaspace는 클래스 로딩과 언로딩 시에 동적으로 메모리를 할당하거나 해제하는 역할을 합니다
이전 Perm영역은 JDK7버전 이하에서 사용되었으나 각종 메타 정보를 OS가 관리하는 영역으로 옮겨 Perm 영역의 사이즈 제한을 없앤 Metaspace 영역을 사용하는 것으로 알고 있습니다.