티스토리 뷰
GC(Garbage Collection)이란?
GC는 JVM의 Heap 영역에서 동적으로 할당됐던 메모리 중 참조되지 않는 객체들을 주기적으로 제거하는 자바의 메모리 관리 기법
GC 대상 식별 기준
GC의 판단 기준은 Reachability 라는 개념을 적용한다.
객체에 레퍼런스가 있는 지를 기준으로, Reachable,Unreachable로 정의한다.

GC 동작 원리
Mark and Sweep
가비지 컬렉션이 될 대상 객체를 Mark하고 Sweep하며 객체가 제거되어 파편화된 메모리영역을 앞에서부터 Compaction채워나가는 작업을 수행한다.

- Mark : Root Space(Stack의 로컬 변수, Method Area의 Static 변수 등) 로부터 그래프 순회를 통해 연결된 객체들에 마킹하는 단계
- Sweep : 마킹되지 않은 즉, Unreachable 객체들을 Heap에서 제거
- Compact : Sweep 후에, 분산된 객체들을 Heap의 시작주소로 메모리 할당.
Heap Memory 구조
동적 레퍼런스 데이터가 저장되는 공간이 Heap 메모리는 객체의 생존기간에 따라 물리적으로 Young Generation 영역과 Old Generation 영역으로 분리하였다.
- Young Generation : 새롭게 생성된 객체가 할당되는 영역으로, 많은 객체들이 생성되었다가 금방 사라진다. Minor GC
- Old Generation : Young영역에서 Rechable 상태를 오래 유지한 객체가 복사되는 영역. 영역크기가 더 Young Generation 보다 크고 가비지는 적게 발생한다. Magor GC, Full GC
Young Generation 은 Eden, Survivor0, Survivor1으로 이루어져있고 Minor GC가 발생할때마다 객체 헤더에 age값을 기록하여 임계값에 달하면 Old Generation으로 Promotion 하게된다.
GC의 단점
- SW성능하락의 문제가 될 수 있음
: Clean Up 시점이 불명확하고 GC 프로세스 작동 중에는 GC 관련 쓰레드를 제외한 모든 쓰레드가 중지 상태가 된다.Stop The World
-> 하지만 관련하여 GC 최적화 튜닝 작업 및 GC 처리 알고리즘으로 개선할 수 있음.(Serial, ConcMarkSweep, G1 등..)
Java 8의 디폴트 GC인 Parallel GC의 경우, Serial GC 와 기본적인 알고리즘은 같지만, Young 영역의 Minor GC를 멀티쓰레드로 수행시켜, Stop-The-World 시간을 감소시킨다. 옵션을 통해 GC 수행할 쓰레드 갯수 설정 가능
java -XX:+UseParallelGC -jar Application.java
# -XX:ParallelGCThreads=N : 사용할 쓰레드의 갯수
'JAVA' 카테고리의 다른 글
[김영한 자바강의] 상속 (0) | 2024.11.21 |
---|---|
[김영한 자바강의] 7강 자바 메모리 구조와 static (0) | 2024.11.12 |
김영한 자바강의 6강 - 접근 제어 (0) | 2024.06.18 |
김영한 자바강의 5강 - 패키지 import (0) | 2024.03.12 |
김영한 자바 강의 2강 -기본형과 참조형 (1) | 2024.03.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SQLD 후기
- vue정리
- Property or method "" is not defined
- JAVA설치 #JDK #JRE
- 프로시저 #배치 #스케쥴러 #잡 #바인딩변수
- 버팀목 국민은행
- 부트스트랩 템플릿 사용시 충돌
- gc 기본 동작 원리
- 알고리즘 나머지연산
- SSAFY 6기
- 청년 버팀목 대출
- 퍼블리싱 #앱에서 DB바로 안붙이는 이유
- safe operator
- Java
- git branch strategy
- java garbage collector 기본
- Optinal Chaining
- java gc
- 나머지연산 분배법칙
- 스프링 동작흐름 #ioc #di #dispatcherservlet
- 스프링 동작흐름
- vue 특징
- java 김영한 강의 #2chapter
- 원자 원소 분자 차이점
- Prim vs Dijkstra
- gc란 뭘까
- Netlify #CICD
- #web /was 구분이유
- 왜 트랜스지방은 살 찜
- 스프링 기본 구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함