Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

코딩 이래요래

JVM의 메모리 구조 본문

JAVA

JVM의 메모리 구조

강범호 2025. 3. 31. 17:52

✅ JVM (Java Virtual Machine)

JVM이란?

  • Java 프로그램을 실행하는 가상 기계로, Java 바이트 코드를 실제 기계어로 변환하여 실행함.
  • 플랫폼 독립적인 Java 바이트 코드를 플랫폼에 맞는 코드로 해석하여 실행하는 Interpreter 역할을 수행함.
  • JVM 자체는 플랫폼에 의존적이다.
    • JVM은 JDK 내부에 포함되어 있으므로, 각 OS에 맞는 JVM을 설치해야 한다.

✅ JVM 메모리 구조

https://kotlinworld.com/3

JVM 메모리는 다음 세 가지 주요 영역으로 구분됨:

📌 1) Method Area (Static Area)

  • JVM이 클래스 로딩 시 클래스 정보, 메소드 정보, 상수, static 변수 등을 저장하는 영역.
  • 클래스가 처음 사용될 때 한 번만 로드되며, 모든 스레드가 공유함.
  • JVM이 종료될 때까지 유지됨.

📌 2) Heap Area

  • 객체가 저장되는 영역이며, Java의 모든 객체는 Heap 영역에 저장됨.
  • 객체는 new 연산자로 생성될 때 힙에 저장되고, 더 이상 참조되지 않으면 **Garbage Collector(GC)**가 메모리를 회수함.

📌 3) Stack Area

  • 메소드 호출 시 생성된 스택 프레임(stack frame)을 저장함.
  • 지역 변수, 파라미터, 메소드 호출 시의 임시 데이터 등이 저장됨.
  • 메소드가 종료되면 해당 메소드의 스택 프레임은 제거됨.

✅ 객체 생성과 메모리 할당 과정 예시

예시 코드:

class Test {
    String a;
    int b;
}

class Application {
    public static void main(String[] args) {
        Test t = new Test();

        t.a = "A";
        t.b = 13;
    }
}

🔸 1) 클래스 로딩 및 Method Area 저장

  • JVM이 처음 프로그램을 실행하면, 클래스 로더가 클래스(Test, Application)를 읽어 Method Area에 클래스 정보를 저장함.
  • 아직 객체 생성 전 단계임.

🔸 2) main() 메소드 실행 및 Stack Area 저장

  • main() 메소드가 호출되면 Stack 영역에 메소드의 스택 프레임이 생성됨.
  • 지역 변수 t는 스택 프레임에 저장되며, 초기값은 null임.

🔸 3) 객체 생성 및 Heap Area 저장

  • new Test() 연산자가 실행되면 Heap 영역에 객체가 생성됨.
  • 각 필드는 기본값으로 초기화됨.
    • String a = null, int b = 0
  • 객체의 참조 주소가 변수 t에 저장됨. (t는 Stack 영역에 위치함)

🔸 4) 필드 초기화

t.a = "A";
t.b = 13;
  • Stack 영역의 참조 변수 t가 Heap 영역의 객체를 참조하여 값을 변경함.
  • 데이터 값("A", 13)은 Heap 영역의 객체 내부에 저장됨.

🔸 5) 메소드 종료 및 객체 소멸

  • main() 메소드가 종료되면 Stack 영역의 스택 프레임이 제거됨. 따라서 변수 t도 사라짐.
  • 하지만 Heap 영역의 객체는 참조가 사라졌을 뿐 즉시 소멸되지 않음.
  • 객체가 더 이상 참조되지 않을 때, JVM의 GC(Garbage Collector)가 자동으로 판단하여 객체를 제거함.

해당 게시글은 학습한 내용을 정리하고 복습하며 정리한 글이므로 틀린 부분이 있을 수 있음.

'JAVA' 카테고리의 다른 글

자료구조  (0) 2025.04.13
SOLID 원칙  (0) 2025.04.07
객체지향 프로그래밍(OOP)의 4가지  (0) 2025.04.01
Java의 클래스와 객체  (0) 2025.03.31
객체지향 프로그래밍  (0) 2025.03.31