GC(Garbage Collector) 종류 및 내부 원리

이동욱

2021/04/04

Categories: 프로그래밍 - 자바 Tags: GC

모든 자바 애플리케이션은 JVM(Java Virtual Machine) 위에서 작동한다. 따라서, JVM이 작동하는데 있어서 메모리 구조와 GC는 애플리케이션의 응답 시간과 성능에 밀접한 관계를 맺고 있다.

GC란 무엇인가?


JVM 메모리 영역


download

download

영역 설명
New/Young 영역 이 영역은 자바 객체가 생성되자마자 저장되고 생긴지 얼마 안 된 객체가 저장되는 곳이다. 자바 객체가 생성되면 이 영역에서 저장되다가 시간이 지남에 따라서 우선 순위가 낮아지면 Old 영역으로 옮겨진다.
Old 영역 New/Young 영역에서 저장되었던 객체 중에 오래된 객체가 이동되어서 저장되는 영역이다.
Perm 영역 Class, Method 등의 코드가 저장되는 영역으로, JVM에 의해서 사용된다.

JVM이 메모리를 관리하는 방식


Minor GC

download

FULL GC

java-gc-29-638

GC가 중요한 이유


다양한 GC 알고리즘


앞에서 설명한 방식 말고도 다양한 GC 방법을 제공하고 있다. 방식은 다음과 같다.

Default Collector

Parallel GC

download

Concurrent GC

Incremental GC (Train GC)

GC 로그 수집 방법


자바

./gradlew bootjar

jar

정상적으로 생성이 되면, 다음과 같은 경로에 jar 파일이 생성된다. 터미널을 통해서 이 경로로 이동한다.

그런 후에 다음과 같은 명령어를 터미널에서 실행 시킨다.

java -jar -verbosegc app.jar

Screen Shot 2021-04-04 at 9 45 53 PM

JVM GC 튜닝


STEP 1. 애플리케이션의 종류 및 튜닝 목표값을 설정

STEP 2. 힙크기와 Perm 크기 설정

STEP 3. 테스트와 로그 분석

STEP 4. Perm 크기 조정

STEP 5. GC 수행 시간 분석

STEP 6. 파라미터 변경

향상 포인트 GC 알고리즘
Perfomance (속도) Parallel GC
Responsiveness (응답성) Concurrent GC
Responsiveness (응답성) Incremental GC
일반 Default GC

참고 문헌


>> Home