가비지 컬렉션(Garbage Collection, GC) 이란?
가비지 컬렉션(Garbage Collection, GC)
- Java의 메모리 관리 기법으로 애플리케이션이 동적으로 할당했던 메모리 영역 중 더이상 사용하지 않는 영역을 정리하는 기능을 한다.
- Heap 메모리에서 활동하며 JVM에서 가비지 컬렉터(Garbage Collector)의 스케줄링을 담당한다.
- 개발자가 따로 메모리를 관리하지 않아도 되므로, 메모리 누수와 같은 문제를 방지하고 개발에만 집중할 수 있도록 한다.
가비지 컬렉터(Garbage Collector)
- 가비지(Garbage) : 앞으로 사용되지 않는 객체의 메모리
- 더이상 참조되지 않는 메모리 객체(가비지)를 모아 정해진 스케줄에 의해 관리(제거)하는 역할을 수행한다.
- 일반적으로 자동으로 실행되지만 수동을 실행하지 위해서는 'System.gc()'를 사용할 수 있다.
💡System.gc()
수동으로 가비지 컬렉터를 실행시키는 명령어. 다만 실행이 보장되지 않고, 성능 저하 문제가 발생할 수 있으므로 실제로 사용하는 것을 권장하지 않는다.
가비지 컬렉션(Garbage Collection)의 단점
자동으로 가비지를 처리해주지만 메모리가 언제 해제되는지 정확하게 알 수 없기 때문에 제어하기 힘들며, GC가 동작하는 동안에는 다른 동작이 멈추기 때문에 오버헤드가 발생한다.
💡 오버헤드 : 프로그램의 실행흐름에서 나타나는 현상 중 하나로, 특정 기능을 수행하는데 들어가는 간접적인 처리 시간, 메모리 등을 말한다.
ex) A라는 일을 처리하는 데 10초의 시간이 걸리는데 어떤 이유로 부가적인 B의 처리를 추가하여 처리한 결과, 처리 시간이 15초 발생했다. 이때 오버헤드는 5초가 된다.
💡STW(Stop The World)
GC를 수행하기 위해 JVM이 멈추는 현상을 의미하며, GC가 작동하는 동안 GC 관련 스레드를 제외한 모든 스레드가 멈추게 된다.
💡GC 튜닝
GC가 작동하면서 JVM이 멈추는 시간을 최소화하는 것을 의미한다.
가비지 컬렉션의 수거 대상
가비지 컬렉션은 특정 객체가 가비지인기 아닌지 판단하기 위해 도달성, 도달능력(Reachability)이라는 개념을 적용한다.
- Reachable : 객체가 참조되고 있는 상태
- Unreachable : 객체가 참조되고 있지 않은 상태
Unreachable 상태의 객체들은 주기적으로 가비지 컬렉터가 제거해준다.
Reference.
https://www.youtube.com/watch?v=jXF4qbZQnBc
'Backend > JVM' 카테고리의 다른 글
가비지 컬렉션(Garbage Collection, GC)의 작동 원리 (0) | 2023.09.11 |
---|---|
JVM 힙(Heap) 영역 (0) | 2023.09.08 |
JVM 동작 방식 및 메모리 구조(2) (0) | 2023.08.31 |
JVM 동작 방식 및 메모리 구조(1) (0) | 2023.08.30 |
JVM이란? (0) | 2023.08.29 |