이러한 가비지들을 메모리에서 정리하여 다른 용도로 사용할 수 있게 해주는 프로그램
자바는 개발자가 명시적으로 메모리 해제를 수행하지 않고, 가비지 컬렉터가 대신 해줌
→ C에서는 free()를 이용해서 직접 해제
GC의 대상 : 객체가 NULL 인 경우, 블록 안에서 객체가 생성되고 블록의 실행이 끝난 경우
GC는 두가지 가정 하에 동작한다.
이 가설에 기반하여, 영역을 young 영역, old 영역 두가지로 나눈다.
→ young 영역에서의 GC가 Minor GC, old 영역에서의 GC가 Major GC이다.
Old 영역의 메모리가 부족해지면 발생하게 된다.
→ Old 영역은 Young 영역보다 크고, Young 영역을 참조할 수도 있기 때문에 일반적으로 Minor GC보다 오래걸림
GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것
→ GC 관련 스레드를 제외한 모든 스레드의 동작을 중단
→ GC 튜닝? 이 stop-the-world 시간을 줄이는 것
Mark and Sweep
Mark: 힙(heap) 내의 객체 중에서 가비지를 식별하는 작업
→ reachability라는 개념을 사용 : 어떤 객체에 유효한 참조가 있으면 'reachable'로, 없으면 'unreachable'로 구별하고, unreachable 객체를 가비지로 간주해 GC를 수행
Sweep: Mark 단계에서 찾은 가비지를 처리해서 메모리를 회수하는 작업
https://d2.naver.com/helloworld/329631
https://d2.naver.com/helloworld/1329