Java Garbage Collection

이진석·2023년 2월 18일

오늘은 자바의 메모리 관리 방법 중 하나인 가비지 컬렉션에 대해서 정리해보려고 한다.

Garbage Collection(GC)란?

위에서 말한 것처럼 자바의 메모리 관리 방법 중 하나로 JVM의 Heap 영역에서 할당했던 메모리 중 필요 없게 된 객체를 모아 주기적으로 제거하는 프로세스를 말한다.

가비지 컬렉션이 없는 C나 C++ 언어에서는 수동으로 메모리의 할당 / 해제를 해줘야하는데, 자바에서는 이를 가비지 컬렉터가 대신 해주기 때문에 한정된 메모리를 효율적으로 사용할 수 있게 되고 개발자 입장에서는 개발에만 집중할 수 있는 환경을 만들어준다.

Garbage Collection의 단점

가비지 컬렉션이 메모리의 관리를 자동으로 해주지만 정확히 언제 메모리가 해제되는지 알 수 없어 직접적인 제어가 힘들고, 해당 프로세스가 동작하는 동안에는 다른 동작을 멈추기 때문에 오버헤드가 발생한다는 문제점을 가지고 있다.

해당 현상을 Stop-The-World 라고 하는데 GC가 동작하는 동안 GC 관련 Thread를 제외한 모든 Thread가 멈추게 되어 서비스 이용에 차질이 생길 수 있어 이 시간을 최소화 해야하며, 해당 작업을 GC 튜닝이라고 한다.

Garbage Collection의 대상

가비지 컬렉션은 특정 객체가 수거 대상인지 아닌지를 판단할 때, 객체에 레퍼런스가 있다면 Reachable로 구분하고, 유효한 레퍼런스가 없다면 Unreachable로 구분하여 수거한다.


가비지 컬렉션의 동작 과정이나 알고리즘은 추후에 더 공부하여 정리해야겠다... 간단하게 생각한 기능인데 생각보다 복잡한 동작 과정을 가지고 있어 제대로된 정리가 필요하다.

profile
고양이 두마리의 집사이자 행복 코딩을 추구하는 주니어 개발자입니다!

0개의 댓글