JVM 메모리 구조 이해하기

Java 코드 최적화

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

JVM이란?

  • 플랫폼에 독립적인 실행 환경
  • 바이트코드(.class)를 기계어로 변환
  • 메모리 관리 및 가비지 컬렉션
  • JIT(Just-In-Time) 컴파일
Java 코드 최적화

JVM 메모리 구조 개요

JVM 메모리 구조

Java 코드 최적화

스택 메모리

  • 메서드 실행과 지역 변수를 위한 메모리 영역
  • LIFO(후입선출) 구조
  • 저장 항목:
    • 지역 변수
    • 기본 데이터 타입
    • 메서드 호출 정보
  • 크기를 초과하면 StackOverflowError 발생
Java 코드 최적화

힙 메모리

  • 모든 객체와 배열 저장
  • new는 객체를 생성해 힙에 할당
  • 가비지 컬렉터가 관리
  • 동적 크기
  • 세대별로 구분
Java 코드 최적화

실제 메모리 동작

public void processData() {
    int count = 0;                  // Stack

String name = "Java"; // Heap
List<String> items = // Reference on Stack new ArrayList<>(); // Object on Heap
items.add(new String("Item")); // Object on Heap }
Java 코드 최적화

메모리 효율적인 코딩 패턴

// Inefficient
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    String s = new String("value"); // 1000 objects
    list1.add(s);
}

// Better
List<String> list2 = new ArrayList<>();
String s = "value";  // Single object
for (int i = 0; i < 1000; i++) {
    list2.add(s);
}
Java 코드 최적화

요약

  • JVM은 주로 스택과 힙 영역을 통해 메모리를 관리합니다
  • 스택 메모리 -> 빠르며, 기본값과 참조를 저장합니다
  • 힙 메모리 -> 객체를 저장합니다
Java 코드 최적화

연습해 봅시다!

Java 코드 최적화

Preparing Video For Download...