개발/지식

가비지 컬렉션(Garbage Collection)의 작동원리

람무 2023. 5. 9. 12:43

가비지 컬렉션이란?

자바에서 사용되는 데이터들은 자바의 고유 메모리 영역에 저장 됩니다.
대표적으로 stack 메모리와 heap 메모리 등이 있습니다.

stack 메모리에는 매개변수나 지역변수 처럼 메서드 호출에 필요한 데이터가 저장되거나 원시타입의 변수들의 값이 저장 됩니다.

예를들면

여기서 3은 원시타입에 해당하는 값 이므로 stack 메모리에 저장 됩니다.

heap 메모리의 경우 참조타입의 주소값이 저장되는데요

ArrayList는 참조타입이니 해당 리스트의 주소값이 heap 메모리에 저장이 될 것 입니다.

이 heap메모리에서 사용하지 않는 객체를 자동으로 제거해주는 역할을 하는 것을 가비지 컬렉션 (Garbege Collection | 이하 GC) 라고 부릅니다.

가비지 컬렉션이 작동할 수 있는 코드

GC는 사용하지 않는 객체를 자동으로 제거한다고 말씀드렸습니다.

그리고 이 사용하지 않는, 불필요한 객체를 자바에서 명시적으로 `null` 로 표현합니다.

예를들어

이런 코드가 있다면 str은 GC에 의해서 삭제가 될 것입니다.

그리고 메모리가 삭제 된 빈 공간은 사용 가능한 메모리가 되어서 새로운 객체가 생성 된다면 빈 공간에 객체가 할당되게 됩니다.

가비지 컬렉션 작동시점

GC의 작동시점은 시스템마다 다르게 적용 됩니다. 다만 한번 작동되면 그동안 어플리케이션과 쓰레드를 사용할 수 없는 stop-the-word 상태가 되어서 이에 대한 시간을 줄이는 것이 중요합니다.

시간을 줄이는 방법은 여러가지가 있습니다. 대용량 객체(배열, 이미지, 파일 등)를 사용 후 즉시 반환하여 메모리 사용을 최소화 하거나 미리 생성된 객체를 재활용하여 새로운 객체 생성을 최소화하는 방법 등이 있습니다.