GC를 실행하기 위해 JVM이 모든 애플리케이션 실행을 멈추는 것나머지 쓰레드는 모두 작업을 멈춘다. 메모리 관리 방법Heap 영역에서 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 프로세스사용하지 않는 객체를 삭제하는 작업
객체로 선언된 변수(stack)의 경우 Heap 메모리에 할당된 객체의 주소를 가리키는 포인터 역할을 한다.Heap 메모리에 할당된 객체들은 그래도 남아 있음GC는 접근한 수 없는 객체라고 판단해서 지운다.
새롭게 생성한 객체의 대부분이 여기에 위치Young 영역에 생성되었다가 사라진다.Minor GC가 발생한다고 말한다.Eden 영역에 위치GC가 한 번 발생한 후 살아남은 객체는 Survivor 영역 중 하나로 이동다른 Survivor 영역으로 이동반복하다가 계속해서 살아남아 있는 객체는 Old 영역으로 이동Survivor 영역 중 하나는 반드시 비어 있는 상태로 남아 있어야 한다.
만약 두 Survivor 영역에 모두 데이터가 존재하거나, 두 영역 모두 사용량이 0이라면 시스템은 정상적인 상황이 아니다.
살아남은 객체가 여기로 복사크게 할당하며, 크기가 큰 만큼 Young 영역보다 GC는 적게 발생Major GC(혹은 Full GC)가 발생한다고 말한다.가득 차면 GC를 실행OS가 자동으로 크기를 조절 (옵션으로 Metaspace의 크기를 줄일 수도 있다.)OS 레벨에서 관리하는 영역으로 구분직렬화(Serialize)한 다음 저장비용이 일반 버퍼에 비해 높다.사이즈가 크고(Large) 오랫동안 메모리에 살아있는(Long-lived) 객체이면서 시스템 네이티브 I/O 연산(Memory Mamped I/O)의 대상이 되는 객체를 사용하는게 좋다.Full GC로부터 발생할 수 있는 성능 저하 요인이 많이 저감된다.📌 여담
📚 참고