ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (김영한의 자바 기본) 5 - 자바 메모리 구조 (메서드, stack, heap)
    개발/Java 2024. 10. 23. 16:10

    ■ 자바 메모리 구조 (메서드, 스택, 힙)

     

    1. 메서드 영역 : 클래스 정보 보관

    2. 스택 영역 : 실제 프로그램 실행되는 영역으로, 메서드 실행할 때마다 하나씩 쌓임 

    3. 힙 영역 : 객체(인스턴스) 생성 영역. new 명령어 사용 시 해당 영역 사용 

     

     

    1. 메서드 영역

    : 실행에 필요한 공통 데이터 관리. 프로그램의 모든 영역에서 공유한다. 

    - 클래스 정보 : 클래스 실행 코드(바이트 코드), 필드, 메서드와 생성자 코드 등 모든 실행 코드 존재

    - static : static 변수 보관

    - 런타임 상수 풀 : 공통 리터럴 상수 보관

    ※ 문자열 풀은 자바 7 부터 힙 영역으로 이동함.

     

    2. 스택 영역(함수의 호출)

    : 자바 실행 시, 하나의 실행 스택 생성된다.

    각 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등을 포함한다.

     

    스택 영역에 쌓이는 네모 모양이 스택 프레임을 나타내며,

    메서드 호출하면 쌓이고 메서드 종료 시 사라진다.

     

    3. 힙 영역(사용자의 동적 할당)

    : 객체(인스턴스)와 배열이 생성되는 영역.

    가비지 컬렉션(GC) 이루어지는 중요 영역이며, 더 이상 참조되지 않는 객체는 GC에 의해 제거된다.

     

    ※ 스택은 쓰레드별로 하나의 실행 스택이 생성된다. 즉, 쓰레드 수만큼스택 영역이 생성되는 것이다. 

     

    ※ 메서드 코드는 메서드 영역(공통) 들어간다.

    인스턴스 생성 시 내부 변수값은 다를 수 있지만 메서드는 공통 코드를 공유한다.

    객체 생성 시 인스턴스 변수(필드)는 메모리가 할당되지만,

    메서드에 대한 새로운 메모리 할당은 없다. (메서드는 메서드 영역에서 공통으로 관리되고 실행)

     

    ■ 정리

    - 자바는 스택 영역을 사용해서 메서드 호출과 지역 변수(매개변수 포함) 관리한다.

    - 메서드를 계속 호출하면 스택 프레임이 계속 쌓인다.

    - 지역 변수(매개변수 포함)는 스택 영영에서 관리한다.

    - 스택 프레임 종료 시 지역 변수도 제거된다.

    - 스택 프레임 모두 제거 시 프로그램 종료된다.

     

Designed by Tistory.