Note

[TIL] 자바 Garbage Collection 가비지 컬렉션 이해

by 달쿨

TIL

가비지 컬렉션 개념

가비지 컬렉션 Garbage Collection(GC)이란 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능을 의미한다. 자바에서는 JVM(Java Virtual Machine)이 자동으로 메모리를 관리하여 프로그램에서 더 이상 사용되지 않는 객체를 식별하고, 해당 객체가 차지하고 있는 메모리를 해제하여 새로운 객체를 위한 공간을 확보하는 것을 의미한다. 별도의 스레드에서 실행되며 일반적으로 백그라운드에서 작동하므로 프로그램 실행에 영향을 미치지 않는다.

 

가비지 컬렉션 동작

객체가 더 이상 프로그램에서 참조되지 않으면 가비지 컬렉션의 대상이 되며 가비지 컬렉터가 주기적으로 자바에서 모든 객체가 저장되는 힙 메모리를 스캔하여 객체가 참조되고 있는지 참조되고 있지 않는지 판단해 제거한다. 이 때 참조되고 있는 상태를 Reachable, 아닌 상태를 Unreachable라고 한다.

이렇게 대상을 찾고 삭제하는 가비지 컬렉션 과정은 내부 알고리즘인 Mark-Sweep을 통해 이루어진다.

과정은 다음과 같이 간단하게 정리할 수 있다. 

1. 마크, 표시: 힙 메모리를 스캔하여 참조되는 객체와 참조되지 않는 객체를 판별하는 과정으로 루트 객체 집합에서 시작해 해당 루트에서 연결할 수 있는 모든 객체를 추적하고 접근 가능한 객체를 마킹한다. 이 때 루트에서 접근할 수 없는 객체가 가비지 컬렉션 대상이 된다.

2. 스왑, 청소: 마킹 단계에서 찾은 참조되지 않는(Unreachable) 객체를 힙 메모리에서 제거한다.

3. 압축: 일부 가비지 컬렉션 알고리즘에서 이루어지는 과정으로, 힙 메모리에서 객체 청소를 하면 단편화가 발생할 수 있어 공간을 압축해 객체를 더 가깝게 이동시킨다.

 

 

이런 과정이 없다면 개발자가 일일히 메모리 할당과 해제를 해줘야 하므로 가비지 컬렉터가 있으면 메모리 관리에 신경을 크게 쓰지 않고 코드 작성에만 집중할 수 있는 장점이 있다. 

일단 개념과 동작을 간단히 이해하고 정리해봤는데, 가비지 컬렉션의 여러 알고리즘이나 동작 원리에 대해서도 추후 자세히 알아봐야 겠다고 느꼈다.

 

참고 자료

https://www.ibm.com/kr-ko/topics/garbage-collection-java

 

Java 가비지 컬렉션이란 무엇인가요? | IBM

가비지 컬렉션은 에덴 공간에서 생성된 객체에 대한 메모리 할당 및 할당 해제를 자동으로 관리하는 Java 프로그래밍 언어의 기능입니다.

www.ibm.com

 

 

블로그의 정보

note

달쿨

활동하기