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

#JVM 17 posts

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

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 챌린지 · 2/15

JVM은 어떻게 실행되고 클래스를 로딩하는가

java 명령이 jar를 프로세스로 띄워 main을 호출하기까지의 과정, 자바 스레드와 OS·커널 스레드의 1:1 매핑, 인터프리터와 JIT, 클래스 로딩과 warm-up을 정리합니다.

09a2f17 · Java · JVM — 19 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
DATABASE

Cache Stampede(캐시 스템피드)

if(kakao)에서 소개된 캐시 스템피드 현상의 원인과 해결책(락, 캐시 웜업, 하이브리드 캐시), 그리고 비슷하게 응답 지연을 일으키는 Spring Boot Cold Start와 JIT 컴파일러의 동작 원리를 흐름도와 함께 정리합니다.

c492706 · Database — 10 min
● main 231 posts UTF-8 LF © 2026 코징 RSS · GitHub