java

자바의 메모리 구조 와 할당

하루이2222 2024. 7. 28. 17:56

  • stackArea(스택영역) :
    • 지역 변수(local variable) , 매개변수(patameter) 가 할당 되는 영역
    • 초기화가 되지 않음
  • heap Area(힙 영역) :
    • 배열과 모든 인스턴스 객체가 할당되는 영역
    • 자동 초기화가 진행됨.
  • static Area(or Method Area ):
    • 소드의 바이트 코드 , static 변수 및 필드 가 할당됨.

예시 코드를 보자

public class MemoryExample {
    static int staticField = 10; // static 필드
    int instanceField = 20; // 인스턴스 필드

    static void staticMethod() {
        System.out.println("Static Method");
    }

    void instanceMethod() {
        System.out.println("Instance Method");
    }

    public static void main(String[] args) {
        int localVar = 30; // 로컬 변수

        MemoryExample.staticMethod(); // static 메서드 호출
        System.out.println(MemoryExample.staticField); // static 필드 접근

        MemoryExample example = new MemoryExample(); // 객체 생성
        example.instanceMethod(); // 인스턴스 메서드 호출
        System.out.println(example.instanceField); // 인스턴스 필드 접근
    }
}

메모리 할당 설명

  1. 클래스 로드 시점
  • staticField:
    • 메모리 영역: 메서드 영역(Method Area)에 저장된다.
    • 설명: static 필드로, 클래스가 로드될 때 메서드 영역에 저장된다. 프로그램 종료 시까지 메모리에 존재한다.
  • staticMethod():
    • 메모리 영역: 메서드 영역(Method Area)에 저장된다.
    • 설명: static 메서드로, 클래스가 로드될 때 메서드 영역에 저장된다. 프로그램 종료 시까지 메모리에 존재한다.
  1. 메인 메서드 실행 시점
  • localVar:
    • 메모리 영역: 스택 영역(Stack Area)에 저장된다.
    • 설명: 메인 메서드의 로컬 변수로, 메인 메서드의 스택 프레임에 저장된다. 메인 메서드가 종료되면 스택에서 제거된다.
  • MemoryExample.staticMethod() 호출:
    • 메모리 영역: 메서드 영역(Method Area)에 저장된다.
    • 설명: 이미 메서드 영역에 로드된 staticMethod()를 호출한다. 별도의 메모리 할당 없이 실행된다.
  • MemoryExample.staticField 접근:
    • 메모리 영역: 메서드 영역(Method Area)에 저장된다.
    • 설명: 이미 메서드 영역에 저장된 staticField의 값을 읽어온다. 별도의 메모리 할당 없이 접근된다.
  1. 객체 생성 시점
  • example 객체:
    • 메모리 영역: 힙 영역(Heap Area)에 저장된다.
    • 설명: new MemoryExample()을 통해 생성된 객체로, 힙 영역에 저장된다. 객체에 대한 참조는 스택 영역에 저장된다.
  • example.instanceField:
    • 메모리 영역: 힙 영역(Heap Area)에 저장된다.
    • 설명: 객체 생성 시 함께 힙 영역에 저장된다. 객체가 메모리에 존재하는 동안 접근 가능하다.
  • example.instanceMethod() 호출:
    • 메모리 영역: 메서드 영역(Method Area)에 저장된다. 메서드 코드가 저장되며, 호출 시 스택 영역(Stack Area)에 스택 프레임이 생성된다.
    • 설명: 인스턴스 메서드는 메서드 영역에 저장되지만, 호출될 때마다 스택 프레임이 생성되어 지역 변수와 매개 변수를 저장한다.

메모리 할당 요약

  • 메서드 영역 (Method Area):
    • static 필드 (staticField)
    • static 메서드 (staticMethod())
    • 인스턴스 메서드 (instanceMethod())
  • 스택 영역 (Stack Area):
    • 로컬 변수 (localVar)
    • 메인 메서드와 instanceMethod() 호출 시 생성되는 스택 프레임
  • 힙 영역 (Heap Area):
    • 인스턴스 필드 (instanceField)
    • 객체 (example)

'java' 카테고리의 다른 글

[자바] equals overriding 과 hash code  (0) 2024.08.11
자바의 static 과 final  (0) 2024.07.28
객체 지향 언어  (0) 2024.07.09
[자바] 입력받기  (0) 2024.07.09
자바의 기본개념  (0) 2024.07.08