끄적모음

JVM 메모리

taehyon 2025. 4. 15. 19:01
  • Method Area - 클래스 정보 저장공간 ( 도서관 비유 )
  • Stack Area - 메서드 실행 시 사용되는 공간(지역변수, 호출정보 등)  ( 접시 쌓기 비유 )
  • Heap Area - 객체가 생성되어 저장되는 공간  ( 풍선 비유 )

 

1. JVM 메모리 구조 

 

 

 

2. 코드 흐름 살펴보기

 

https://cscircles.cemc.uwaterloo.ca/java_visualize/

 

Java Visualizer

Write your Java code here: args: +command-line argument stdin (also visualizes consumption of StdIn) x <!-- Execute code using Python 2.7 Python 3.3 , --> <!-- these two make sense, but are not implemented yet hide frames of exited functions show frames of

cscircles.cemc.uwaterloo.ca

public class Main {
    static class Person {

        // 1. 속성
        String name;
        int age;
        String address;

        // 2. 생성자
        Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        // 3-1. 소개 기능(이름 나이 출력 기능)
        void introduce() {
            System.out.println("나의 이름은");
            System.out.println(this.name + "입니다.");
            System.out.println("나의 나이는");
            System.out.println(this.age + "입니다.");
        }

        // 3-2. 더하기 기능(소개를 하고 더하기 연산 수행)
        int sum(int value1, int value2) {
            introduce();
            int result = value1 + value2;
            return result;
        }
    }

    public static void main(String[] args) {
        String name = "Steve";
        int age = 20;
        Person personA = new Person(name, age);
        personA.introduce();

        int value1 = 1;
        int value2 = 2;

        int ret = personA.sum(value1, value2);
        System.out.println(ret);
    }
}

 

Frames = stack 영역 / Objects = Heap 영역

 

 

 

3. Metod(static) 이해하기

 

  • 프로그램이 실행되면 작성했던 모든 파일의 데이터가 Method영역에 저장됨
  • 프로그램 실행 시점에  한번만 저장됨
  • Method 영역에 저장된 데이터는 프로그램 전체에서 공용으로 활용 가능
  • static 으로 선언된 변수와 메서드들이 이 공간에 위치하게 됨

 

Heap 영역 이해하기

  • new 키워드로 생성된 객체는 Heap 영역에 저장된다.
  • stack 영역의 변수가 Heap 영역의 객체를 참조한다.
  • 객체를 담은 변수에는 실제 객체의 Heap 메모리 주소 값이 저장된다

stack 영역에서 heap 영역의 객체를 참조(화살표로 가리키고 있는 모습을 기억하자)

 

 

 

Stack 영역 이해하기

  • 메서드가 호출될 때마다 Stack 영역에 메모리가 할당됩니다.
  • 하나의 접시(스택프레임)에 각 메서드의 지역변수가 저장됩니다.
  • 이 영역은 접시를 쌓듯이 LIFO-후입선출 구조입니다.
  • 메서드가 시작되면 추가되고 메서드가 종료되면 사라지는 구조입니다.
  • 특정 메서드가 실행되면 해당 메서드의 정보와 변수가 Stack 에 저장되고 메서드 실행이 끝나면 그 메모리는 자동으로 제거 됩니다.
  • 메서드 내에 선언된 지역변수들이 저장되는 공간입니다. → 변수에 객체가 담기면 객체의 주소값이 저장됩니다.