코드와이
[Java] GC(가비지 콜렉터, Garbage Collector) 본문
Garbage Collector
- 가비지(Garbage)란?
- 정리되지 않은 메모리
- 유효하지 않은 메모리 주소
-
위 코드에서 처음에 할당한 3을 가비지라고 부른다.int[] arr = new int[1]; arr[0] = 3; arr = new int[] {1};
- 앞으로 사용하지 않고 메모리를 가지고 있는 객체 또한 가비지라고 부른다.
- 메모리가 부족할 때 이런 가비지들을 메모리에서 해제시켜 다른 용도로 사용할 수 있게끔 해주는 프로그램
- C++과의 차이점
- C++ : 사용하지 않을 객체의 메모리를 직접 해제
- Java : GC가 자동으로 잡아줌
- Stop The World
- GC 실행을 위해 JVM이 애플리케이션 실행을 멈추는 것
- GC가 실행될 땐 GC를 실행하기 위한 쓰레드를 제외한 모든 쓰레드가 멈추고, GC 작업이 완료된 후에 다시 작업을 시작
- GC 튜닝 => stop the world 시간을 줄이는 것
- GC 과정(= Mark and Sweep)
- Mark
- GC가 스택의 모든 변수 또는 Reachable 객체를 스캔하면서 각각 어떤 객체를 참조하는지 찾는 과정
- Stop the world 발생
- Sweep
- 이후 Mark 되어있지 않은 객체들을 힙에서 제거하는 과정
- Mark
- Minor GC와 Major GC
- JVM의 Heap은 Young, Old, Perm으로 나뉨
- Young : Minor GC
- 새롭게 생성한 객체가 위치
- 대부분의 객체가 금방 접근 불가능 상태가 되기 때문에 매우 많은 객체가 Young에 생성되었다가 사라진다. 이를 Minor GC가 발생한다고 한다.
- Old : Major GC
- Young에서 살아남은 객체가 여기로 복사된다.
- Young 영역보다 크게 할당되며, 크기가 큰 만큼 Young 영역보단 GC가 적게 발생
- Perm : Major GC
- Reachability
- GC가 가비지 객체인지 판별하기 위한 개념
- unreachable 객체를 가비지로 간주
- 바꿔말해 Reachability를 제어할 수 있으면 GC에 일부 관여하는 것이 가능
- Default GC
- Java 9, 10 : G1GC
- 더 짧은 주기의 FUll GC 작업을 수행하여 전체적인 처리량이 줄어드는 대신 일시 정지 시간을 크게 단축
- Java 7, 8 : ParallelGC
- Old Generation 영역에서만 Full GC 수행
- Java 9, 10 : G1GC
- Reference
'Java' 카테고리의 다른 글
[Java] Java & 객체지향 (0) | 2021.11.28 |
---|