~/tech-blog/tag/GC — zsh
지금 --명이 보고 있습니다오늘 --누적 --

#GC 16 posts

카테고리를 가로질러 GC를 다룬 글을 모았습니다.

JAVA · JVM

Garbage Collection(GC)

JVM 메모리 구조와 Mark·Sweep·Compaction, 세대별 GC의 동작 원리를 정리하고, Serial GC부터 G1 GC, ZGC까지 주요 GC 알고리즘의 단계와 Stop-The-World 구간을 흐름도로 비교합니다.

2024.09.13 · 20eb3a0 · Java · JVM — 19 min
JAVA · JVM

Garbage Collection 튜닝

jstat으로 GC 상태를 모니터링하는 방법과 Young·Old·Metaspace 영역별 증상에 따른 GC 튜닝 기준을 힙 구조, 튜닝 흐름 그림과 함께 정리합니다.

2024.09.13 · 20eb3a0 · Java · JVM — 9 min
GC 챌린지 · 1/15

GC를 이해하기 위한 OS 기초: 프로세스와 스레드

CPU가 명령어를 실행하는 방식부터 OS의 역할, RAM이 부족할 때 쓰는 가상 메모리와 page fault, 프로세스와 스레드의 차이까지 GC 공부에 필요한 OS 기초를 정리합니다.

f31faa2 · Java · JVM — 11 min
GC 챌린지 · 3/15

GC의 역할과 튜닝 기준: Ergonomics와 JVM 기본 설정

JVM 프로세스 메모리 구조와 GC가 등장한 배경, GC의 역할과 Mark·Sweep·Compact를 살펴보고, GC 선택과 튜닝이 중요한 이유, Ergonomics가 고르는 기본값과 Pause-Time·Throughput·Footprint 목표, GC 튜닝 순서를 정리합니다.

d2c80a5 · Java · JVM — 22 min
GC 챌린지 · 4/15

JVM TLAB (Thread Local Allocation Buffer)

멀티스레드 환경에서 객체 할당 경합을 줄이는 TLAB이 pointer bump로 할당하는 방식, 공간이 부족할 때의 retire와 TLAB 밖 할당, 크기 결정 방식과 주요 플래그·로그 보는 법을 정리합니다.

09a2f17 · Java · JVM — 12 min
GC 챌린지 · 6/15

TLAB과 Generation 크기 조정: Serial GC의 힙 크기 옵션

Serial GC의 GC 로그와 TLAB을 살펴보고, -Xmx·-Xms의 예약과 커밋, NewRatio·NewSize·SurvivorRatio로 generation 크기를 정하는 방법과 서버 애플리케이션 가이드라인을 정리합니다.

d2c80a5 · Java · JVM — 17 min
GC 챌린지 · 7/15

GC 종류: Serial, Parallel, G1, ZGC와 CMS, Shenandoah

Oracle JDK 25에서 쓸 수 있는 Serial·Parallel·G1·ZGC의 특징과 기본으로 선택되는 기준, generational ZGC의 버전별 변화, CMS GC가 은퇴한 과정과 Shenandoah GC를 정리합니다.

d2c80a5 · Java · JVM — 12 min
GC 챌린지 · 8/15

Parallel GC: GC 스레드, PLAB와 Ergonomics

Parallel GC의 GC 스레드 수가 정해지는 방식과 Serial GC와 다른 힙 배치, PLAB, 그리고 Ergonomics가 pause time·throughput·footprint 목표에 맞춰 generation 크기를 늘리고 줄이는 방식을 정리합니다.

ff01f60 · Java · JVM — 19 min
GC 챌린지 · 9/15

G1 GC 핵심 원리: region, mixed collection과 concurrent marking

Serial·Parallel GC의 한계에서 출발해 G1 GC가 heap을 region으로 나눠 쓰는 방식과 Young-Only·Space-Reclamation 단계, mark stack으로 old 객체를 marking하는 과정, mixed collection이 old region을 회수하는 방식을 정리합니다.

ff01f60 · Java · JVM — 21 min
GC 챌린지 · 10/15

G1 GC concurrent marking: SATB, pre-write barrier와 TAMS

G1 GC가 애플리케이션과 동시에 old 객체를 marking할 때 생기는 두 가지 오판과, 이를 막는 pre-write barrier·SATB buffer·mark stack·TAMS 포인터의 동작을 단계별 예제로 정리합니다.

ff01f60 · Java · JVM — 17 min
GC 챌린지 · 11/15

G1 GC의 remembered set과 collection set

G1 GC가 young GC와 mixed GC에서 remembered set으로 collection set 밖의 참조를 찾는 방식과 Rebuild Remembered Set, Merge Heap Roots를 정리합니다.

ff01f60 · Java · JVM — 13 min
GC 챌린지 · 12/15

G1 GC: humongous object, evacuation failure와 full GC

G1 GC의 humongous object 할당·회수와 eager reclamation, evacuation failure와 pinned 객체, full GC가 일어나는 흐름, collection set을 정리합니다.

ff01f60 · Java · JVM — 15 min
GC 챌린지 · 13/15

G1 GC 튜닝: young generation 크기, mixed GC, IHOP

G1 GC를 디폴트 옵션과 MaxGCPauseMillis·-Xmx로 튜닝하는 방법과 heap 크기 조정, young generation 크기 옵션, young GC·mixed GC가 pause time 목표를 넘을 때의 대응, back to back GC, IHOP, full GC와 Sys 시간이 클 때의 해결책을 정리합니다.

ff01f60 · Java · JVM — 22 min
GC 챌린지 · 14/15

ZGC 핵심 요약과 튜닝 옵션

ZGC의 특징과 generational ZGC로 바뀐 과정을 짧게 짚고, -Xmx·SoftMaxHeapSize, uncommit과 AlwaysPreTouch, OS large page 설정, ConcGCThreads 같은 ZGC 튜닝 옵션을 정리합니다.

ff01f60 · Java · JVM — 8 min
GC 챌린지 · 15/15

Metaspace: class metadata와 High-Water Mark, 압축 클래스 포인터

class metadata가 저장되는 Metaspace가 chunk 단위로 관리되고 회수되는 방식, GC를 일으키는 High-Water Mark와 관련 옵션, 압축 클래스 포인터와 Compact Object Headers, Metaspace 로그 읽는 법을 정리합니다.

ff01f60 · Java · JVM — 13 min
● main 231 posts UTF-8 LF © 2026 코징 RSS · GitHub