Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 포트포워딩
- Modal
- javascript animation
- sequelize
- Recoil
- 웹팩
- styled-component
- Redux
- 회고
- CDN
- go
- docker
- npx
- component
- route
- scrapping
- react
- express
- socket.io
- typescript
- 정규표현식
- graphql
- 성능최적화
- 반응형웹
- AWS
- 웹크롤링
- cicd
Archives
- Today
- Total
프로그래밍 공부하기
GC(Java) 본문
- GC : Heap 영역에서 사용하지 않는 객체를 삭제하는 프로세스
- Heap: Object 타입의 객체들
- Heap의 구조
- Young Generation : 새로운 객체들이 할당되는 영역
- Eden
- Suvivor 0, 1
- Survivor 0, 1 둘 중 하나의 영역은 비어있어야 한다.
- Old Generagtion : 오랫동안 수거되지 않고 살아남은 객체들이 존재하는 영영
- Young Generation : 새로운 객체들이 할당되는 영역
- meta space : GC 시에 필요한 클래스와 메서드의 요약정보가 있는 영역
- GC의 수거대상 판별
- GC의 루트로부터 참조하고 있는 객체들을 하나씩 탐색해나간다.
- GC의 Root : Stack 영역 데이터, Method 영역의 Static 데이터, JNI에 의해 생성된 객체
- 어떤 객체에 유효한 참조가 존재한다면 Reachable, 그렇지 않다면 Unreachable이라 한다.
- Unreachable한 객체는 GC가 수거한다.
- GC의 루트로부터 참조하고 있는 객체들을 하나씩 탐색해나간다.
- GC의 알고리즘
- Mark
- GC Root로부터 모든 변수를 스캔하면서 수거 대상을 찾아 마킹한다.
- Sweep
- GC의 수거 대상들을 Heap에서 제거
- Compact
- Sweep 후에 분산된 객체들을 Heap의 시작 주소로 모아 메모리 단편화를 막는다.
- Mark
- GC 동작의 전제 조건
- 대부분의 객체는 금방 UnReachable한 상태가 된다.
- -> Minor GC는 많은 Garbage를 수거하므로 자주 일어나도 괜찮다.
- -> Major GC는 상대적으로 Garbage를 수거하므로 적게 발생시켜야 한다.
- 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.
- 대부분의 객체는 금방 UnReachable한 상태가 된다.
- GC의 동작
- 새로운 객체가 Young Generation의 Eden에 할당된다.
- Eden에 더이상 할당할 공간이 없다면 Minor GC 발생
- Reachable / Unreachable 판별
- Reachable 객체는 Survivor 0영역으로 이동 후 age 값을 증가시킨다.
- Unreachable 객체는 제거된다.
- Eden에 더이상 할당할 공간이 없다면 Minor GC 발생
- 새로운 객체가 Young Generation의 Eden에 할당된다. 반복
- Eden에 더이상 할당할 공간이 없다면 Minor GC 발생
- Reachable / Unreachable 판별
- Reachable 객체는 Survivor 1영역으로 이동 후 age 값을 증가시킨다.
- Unreachable 객체는 제거된다.
- Eden에 더이상 할당할 공간이 없다면 Minor GC 발생
- age가 특정 임계점에 도달한 객체들은 Old Generation으로 이동한다.
- Old Generation이 꽉 차면 Major GC 발생
- 새로운 객체가 Young Generation의 Eden에 할당된다.
- Stop the World : GC를 실행하기 위해 애플리케이션 실행을 멈추는 것
- GC 외의 모든 작업을 중단한다.
'감상문' 카테고리의 다른 글
2021년 FE 동향, 한방에 끝내기 (0) | 2021.12.27 |
---|---|
백발 될때까지 일하는 개발자가 되어보자 (0) | 2021.11.27 |
CORS (0) | 2021.10.11 |
의존성을 이용해 설계 진화시키기 (0) | 2021.09.12 |
빠르게 성장하는 슈퍼루키로 거듭나기 (0) | 2021.08.06 |
Comments