skarltjr / Memory_Write_Record

나의 모든 학습 기록
0 stars 0 forks source link

JVM GC #81

Open skarltjr opened 2 years ago

skarltjr commented 2 years ago

1. JVM GC란

불필요한 메모리를 알아서 정리

2. gc의 동작순서

기본적으로 gc는 jvm memory의 heap area영역에서 작동

1. heap영역에 존재하는 객체들에 대해 접근 가능한지 확인
2. GC root부터 시작하여 참조값을 따라가며 접근 가능한 객체들에 대해 Mark
3. Mark되지않은, 즉 접근할 수 없는,제거된 객체를 메모리에서 제거한다.
스크린샷 2022-03-06 오후 4 46 32

2-2. 영역

스크린샷 2022-03-06 오후 4 57 14
- young :
-  old전까지의 영역(eden~sevior )으로 새롭게 생성한 객체의 대부분이 이곳에 위치.
- 대부분의 객체가 금방 접근 불가능상태(삭제)되기 때문에 보통 young영역에 생성-사라진다.
- young 영역에서 객체가 사라질때 minor Gc가 발생한다고한다

- old : 
- 접근 불가능 상태로 되지 않아 young영역에 살아남은 객체가 이곳으로 복사 
- 즉 새로 생성되고 오랫동안 삭제되지않고 살아있는 객체들이 old영역으로 이동
- young 영역보다 크게 할당하며 gc가 적게 발생
- major gc

3. GC의 종류

3-1. Serial GC

3-2. Parallel GC

3-3. parallel old gc

3-4. CMS GC

skarltjr commented 2 years ago

참고 : stop the world

GC를 실행하기 위해 JVM이 어플리케이션 실행을 멈추는 것
skarltjr commented 2 years ago

내가 사용하는 자바 11은 어떤 GC를 사용할까?

java 9부터는 G1GC를 디폴트로 사용한다.

G1GC

G1GC의 기본 구조

참고 :

  1. 새로 생성된 객체는 빨간 영역의 Eden 영역에 할당
  2. 파란색은 old영역
  3. 파란색 중 큰 H영역은 매우 큰 영역을 차지하는 커다란 객체
  4. 새로운 객체는 비어있는 회색 공간에 할당
  5. 각 영역들은 스레드를 각각 할당하여 각 스레드가 담당한다.

G1GC의 동작방식