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
로부터 발생할 수 있는 성능 저하 요인
이 많이 저감
된다.📌 여담
📚 참고