이건 자바 성능 문제의 70%가 GC에서 시작하지만,
그 70%를 제어할 수 있다고 착각하면 더 큰 사고가 난다
는 뜻입니다.

 

1️⃣ “GC를 모르면 성능을 논하지 말라”

의미

  • 자바에서 성능 저하 = CPU 문제가 아니라 GC 문제인 경우가 압도적
  • GC를 이해 못하면:
    • TPS 떨어지는 이유 모름
    • 간헐적 Full GC 원인 못 찾음
    • “서버가 느리다” 수준의 말만 반복

실무 사례

  • 메모리 누수라고 오해 → 사실은 객체 생성 폭증
  • DB 느리다고 착각 → 실제로는 Stop-The-World
  • 스케일 아웃으로 해결 → GC 병목은 그대로 복제됨

핵심 포인트

GC를 모르면 성능 논의는 체감 성능 감상평이지 엔지니어링이 아님


2️⃣ “GC를 알면 성능을 과신하지 마라”

여기서 중요한 부분입니다

GC를 안다는 건:

  • G1 / ZGC / CMS 차이 설명 가능
  • Eden / Survivor / Old 개념 앎
  • -Xms, -Xmx, MaxGCPauseMillis 만질 수 있음

👉 하지만 그걸로 성능을 통제한다고 믿으면 위험


3️⃣ 왜 과신하면 안 되나

① GC는 결정론적이지 않다

  • 동일한 코드, 동일한 트래픽
  • 힙 상태, 객체 생존율, OS 스케줄링에 따라 결과 다름

→ GC는 “조절”이지 “지배”가 아님


② GC 튜닝은 트레이드오프

  • Pause 줄이면 → Throughput 손해
  • 힙 키우면 → Full GC 한 번이 재앙
  • Minor GC 줄이면 → Old 폭탄

👉 하나 고치면 다른 데 터진다


③ 진짜 성능 병목은 GC 바깥에 있음

  • 객체 생성 패턴 (DTO 남발, 스트림 오용)
  • 캐시 설계 실패
  • 잘못된 동시성 모델
  • DB 커넥션 풀 / 네트워크 지연

GC는 결과, 원인은 코드다.


4️⃣ 이 문장이 말하는 개발자 레벨

이 말은 보통 이 단계 개발자에게 나온다:

단계특징
초급 GC 존재만 안다
중급 GC 튜닝으로 해결하려 든다
고급 GC를 피해 설계한다

👉 진짜 고수는
“GC를 잘 쓰는 코드”가 아니라
“GC가 문제되지 않는 코드”를 만든다


5️⃣ 실무 한 줄 요약

  • GC 모르면 → 성능 논의 자격 없음
  • GC 알면 → 겸손해져야 함
  • GC 고수는 → GC를 안 만진다

6️⃣ 자바 실무 명언으로 재정리

“성능 튜닝은 GC 옵션이 아니라 객체 수명 설계다.”

LIST

+ Recent posts