-
[CS] 자바 Gabage CollectionCS 2024. 1. 18. 22:46
Gabage Collection : GC라고 하며 Heap 영역에서 참조되지 않는 객체의 자원을 해제해서 메모리 공간을 효율적으로 사용할 수 있게 도와줍니다.
하지만 GC가 동작하는 동안 다른 동작이 멈추게 되는데 이를 Stop - The - World라고 합니다.
GC가 동작할 때 GC와 관련된 모든 쓰레드가 멈추기 때문에 GC가 동작하는 시간을 최대한 줄여야 합니다.
예)GC가 하는 일 GC는 어떤 기준으로 객체를 지울까요?
어딘가에 참조되어 있다면 Reachable, 참조되어 있지 않다면 Unreachable로 객체를 분류한 다음 Mark, Sweep, Compaction 알고리즘을 통해 Unreachable 객체를 제거합니다.
Mark 동작 Mark 동작은 GC ROOT로부터 그래프 구조로 저장된 객체 중 Reachable인 것들을 탐색합니다.
Sweep 동작 Sweep 동작은 Unreachable 객체를 제거합니다.
Compaction 동작 Reachable 객체만 압축하여 저장합니다. GC 종류마다 Compaction 동작을 안 할 수도 있습니다.
GC ROOT는 Stack영역의 변수, Method 영역의 변수, Native Method Stack의 참조(native code 사용을 위한 인터페이스)가 있습니다.
Heap 영역의 메모리 구조
Heap 영역은 크게 Young과 Old 영역으로 나눠져 있습니다.
Young 영역
- 새롭게 생성된 객체가 저장됩니다.
- Minor GC라고 합니다.
Old 영역
- Young 영역 Reachable 상태에서 복사가 됩니다.
- Young 영역보다 크며, 가비지는 적게 발생합니다.
- Major GC 또는 Full GC라고 합니다.
또한 Young 영역은 Eden, Survivor 0/1로 나눠져 있습니다.
Eden 영역
- new를 통해 새로 생성된 객체
- 주기적으로 GC가 발생하고, 살아남으면 Survivor로 보냅니다.
Survivor 0/1
- 최소 한 번의 GC에서 살아남은 객체가 존재합니다.
- 0 또는 1중 하나는 무조건 비워있어야 합니다.
'CS' 카테고리의 다른 글
[CS] Java HashMap의 동작 과정 (0) 2024.03.01 [CS] 자바 Minor GC, Major GC(Full GC) (0) 2024.01.26 [CS] 자바 메모리 영역 (0) 2024.01.16 [CS] Java의 JVM이란? (0) 2023.12.25 [자료구조] Trie (0) 2023.08.01