Garbage Collection이란?
JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스
가비지 컬렉션은 자바 메모리 관리 방법 중 하나입니다!
자바에서 의미하는 가비지(Garbage)란
💡일반적으로 Heap 영역에서 동적으로 할당했던 메모리 중 필요없게 된 메모리 객체
가비지 판단 방법
가비지 컬렉션은 특정 객체가 가비지인지 아닌지 판단하기 위해 도달성입니다
즉,도달능력이라는 개념을 적용한다고 볼 수 있습니다.
객체에 대해 레퍼런스가 있다면 Reachable로 구분되고, 객체에 유효한 레퍼런스가 없다면 Unreachable로 구분해 수거합니다
- Reachable : 객체가 참조되고 있는 상태
- Unreachable : 객체가 참조되고 있지 않은 상태
가비지 컬렉션 장점
- 개발자가 동적으로 할당한 메모리 영역 전체를 완벽하게 관리 하지 않아도 됩니다
- 유효하지 않은 포인터 접근이나 메모리 누수 같은 버그를 줄이거나 막을 수 있습니다
- 유효하지 않은 포인터 접근
: 이미 동적할당한 메모리를 해제한 영역에 접근하게 되는 버그
- 이중 해제
: 이미 해제된 메모리를 또 다시 해제하는 오류를 줄일 수 있습니다
- 메모리 누수
: 더이상 사용하지않는 메모리 영역을 해제하지 않고 남겨진 것이 쌓이게 되면 메모리 누수가 일어납니다메모리 누수가 지속되면 메모리 고갈로 인하여 프로그램이 중단 될 수 있습니다
이러한 GC의 장점이 있는 반면 GC 단점도 있겠죠?
가비지 컬렉션의 단점
- 어떤 메모리를 해제할지 결정하는데 사용되는 알고리즘의 비용이 많이 듭니다
- 가비지 컬렉션이 행동하는 타이미잉나 GC의 점유 시간을 사전에 예측하기 어려워 제어가 어렵습니다
- 할당된 메모리가 해제되는 시점을 알 수 없습니다
- 가바지 컬렉션이 동작하는 동안에는 다른 동작을 멈추기 때문에 오버헤드가 발생 합니다(STW)
STW(Stop The World)
💡가비지 컬렉션을 수행하기 위해 자바 가상 머신이 프로그램 실행을 멈추는 현상
자바 가비지 컬렉션의 동작방식
Mark And Sweep
가비지 컬렉션은 Unreachable한 객체를 청소하기 위해 Mark-Sweep 알고리즘을 사용합니다
GC가 될 대상 객체를 식별(Mark) 하고 제거(Sweep)하며 객체가 제거되어 단편화된 메모리 영역을 앞에서 부터 채워 나가는 작업을 수행합니다