Develop Artifacts/Java

Java - 24. jvm gc

GC 로그에서 "pause"가 200ms인 이유 — JVM 메모리 구조와 가비지 컬렉터 선택프로덕션 서버의 응답 시간이 주기적으로 200ms로 튄다. GC 로그를 보면 GC pause (G1 Evacuation Pause) 187ms가 찍혀 있다. 사용자는 "왜 갑자기 느려지나요?"라고 묻는다. 답은 GC의 stop-the-world — GC가 객체를 회수하는 동안 애플리케이션 스레드가 모두 멈추기 때문이다.서버 응답이 주기적으로 200ms로 튄다. GC 로그를 보면 "GC pause 187ms". 누가 멈추게 하는가? — 가비지 컬렉터가 객체를 청소하는 동안 모든 스레드가 잠시 멈춘다(stop-the-world). 이 글은 왜 멈추는지, G1/ZGC/Shenandoah가 각각 다르게 해결하는지를 풀어간..

Develop Artifacts/Java

Java - 18. thread sync

두 스레드가 count++를 동시에 실행하면 값이 1만 증가하는가 — 가시성과 원자성// Java 25class Counter { private int count = 0; public void increment() { count++; }}두 스레드가 동시에 counter.increment()를 10,000번씩 호출하면 count가 20,000이 될까? — 아니다. 대부분 17,000~19,000 사이의 값이 나온다. count++는 하나의 연산처럼 보이지만, 실제로는 읽기 → 더하기 → 쓰기 세 단계이며, 두 스레드가 동시에 같은 값을 읽으면 하나의 증가가 사라진다(lost update).이것이 경쟁 조건(race condition)이다. 이 글은 Java 메모리 모델(JMM), synchro..

Archive

'memory-model' 2

Develop Artifacts/Java

Java - 24. jvm gc

GC 로그에서 "pause"가 200ms인 이유 — JVM 메모리 구조와 가비지 컬렉터 선택프로덕션 서버의 응답 시간이 주기적으로 200ms로 튄다. GC 로그를 보면 GC pause (G1 Evacuation Pause) 187ms가 찍혀 있다. 사용자는 "왜 갑자기 느려지나요?"라고 묻는다. 답은 GC의 stop-the-world — GC가 객체를 회수하는 동안 애플리케이션 스레드가 모두 멈추기 때문이다.서버 응답이 주기적으로 200ms로 튄다. GC 로그를 보면 "GC pause 187ms". 누가 멈추게 하는가? — 가비지 컬렉터가 객체를 청소하는 동안 모든 스레드가 잠시 멈춘다(stop-the-world). 이 글은 왜 멈추는지, G1/ZGC/Shenandoah가 각각 다르게 해결하는지를 풀어간..

댓글
Develop Artifacts/Java

Java - 18. thread sync

두 스레드가 count++를 동시에 실행하면 값이 1만 증가하는가 — 가시성과 원자성// Java 25class Counter { private int count = 0; public void increment() { count++; }}두 스레드가 동시에 counter.increment()를 10,000번씩 호출하면 count가 20,000이 될까? — 아니다. 대부분 17,000~19,000 사이의 값이 나온다. count++는 하나의 연산처럼 보이지만, 실제로는 읽기 → 더하기 → 쓰기 세 단계이며, 두 스레드가 동시에 같은 값을 읽으면 하나의 증가가 사라진다(lost update).이것이 경쟁 조건(race condition)이다. 이 글은 Java 메모리 모델(JMM), synchro..

댓글

wall

방명록

방문 흔적을 남겨주세요. 질문이나 인사 모두 환영합니다.