가비지 컬렉션(Garbage Collection)과 JIT(Just-In-Time) 컴파일

Java 코드 최적화

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

가비지 컬렉션의 기본 개념

수동 메모리 관리(C/C++)

  • 프로그래머가 메모리를 직접 할당하고 해제
  • 메모리 누수 발생 가능성

$$

Java의 가비지 컬렉션

  • 자동 메모리 할당
  • 사용하지 않는 객체 자동 감지
  • 자동 메모리 회수
Java 코드 최적화

가비지 컬렉션 작동 방식

  • Mark(표시): 루트에서 도달 가능한 객체 식별
  • Sweep(제거): 도달 불가능한 객체 제거

Screenshot 2025-05-11 at 6.58.38 PM.png

Java 코드 최적화

가비지 컬렉션과 성능

GC 성능 트레이드오프

  • 개발은 단순화되지만 성능 고려 사항이 따름

$$

GC 알고리즘

  • 최신 JVM은 다양한 가비지 컬렉션 알고리즘을 제공
  • 선택 기준은 애플리케이션 요구 사항에 따라 달라짐
  • GC 알고리즘에 대한 자세한 가이드는 여기에서 확인 가능
1 https://www.baeldung.com/jvm-garbage-collectors
Java 코드 최적화

GC가 성능에 미치는 영향

// Bad - Creating many short-lived objects
for (int i = 0; i < 1000000; i++) {
    new Object(); // Immediately becomes garbage
}


// vs. Reusing objects Object obj; for (int i = 0; i < 1000000; i++) { obj = new Object(); // Only one reference }
Java 코드 최적화

GC 친화적인 코딩

// Avoid this in performance-critical code
String result = "";
for (int i = 0; i < 100000; i++) {
    result += i; // Creates a new String each time
}


// Better approach StringBuilder builder = new StringBuilder(); for (int i = 0; i < 100000; i++) { builder.append(i); // Reuses the same buffer } String result = builder.toString();
Java 코드 최적화

JIT(Just-In-Time) 컴파일

  • JVM 실행 과정:
    • Java 소스 -> 바이트코드
    • 바이트코드 -> 인터프리터 실행
    • 자주 실행되는 메서드 -> 네이티브 머신 코드
  • 자주 실행되는 코드를 최적화
Java 코드 최적화

JIT 친화적인 코드 패턴

  • 예측 가능한 코드를 작성
// Predictable branches help JIT optimization
if (value > 0) {
    // Code A - frequently taken path
} else {
    // Code B - rarely taken path
}
  • 작고 집중된 메서드를 작성
  • 작고 자주 호출되는 메서드는 인라이닝(inlining)에 적합
  • 복잡한 코드는 최적화 효과가 떨어질 수 있음
Java 코드 최적화

요약

  • 성능이 중요한 경로에서는 객체 생성을 최소화
  • JIT 최적화 기능에 맞는 예측 가능한 코드를 작성
  • 먼저 프로파일링하여 실제로 중요한 코드에 최적화를 집중
Java 코드 최적화

연습해 봅시다!

Java 코드 최적화

Preparing Video For Download...