Back_End/JAVA

자바(Java)의 메모리 영역

10Biliion 2024. 12. 19. 10:38

 

 

 

자바는 JVM(Java Virtual Machine)을 통해 실행되며, JVM은 프로그램 실행 시 메모리를 효율적으로 관리하기 위해 여러 영역으로 나눕니다. 이 글에서는 자바 메모리 구조를 이해하는 데 필요한 핵심 개념들을 살펴보겠습니다. 

 

자바 메모리 영역의 구성 🗂️

자바 메모리는 크게 아래 다섯 가지 영역으로 나뉩니다:

1. 메소드(Method) 영역(= Static) 📚

  • 역할: 클래스 수준의 정보를 저장하는 공간입니다.
  • 내용:
    • 클래스 로더가 읽어온 클래스 메타데이터
    • static 변수
    • 상수 풀 (Constant Pool)
  • 특징:
    • 모든 쓰레드가 공유하는 영역입니다.
    • JVM 실행 중 런타임 상수나 메서드 정보를 저장합니다.

 

2. 힙(Heap) 영역 🏗️

  • 역할: 객체와 배열을 저장하는 영역으로, JVM에서 가장 큰 메모리 영역입니다.
  • 내용:
    • 모든 객체(instance)
    • 클래스의 인스턴스 변수
  • 특징:
    • 모든 쓰레드가 공유하며, 가비지 컬렉터(GC)에 의해 관리됩니다.
    • 객체는 참조(reference)를 통해 접근합니다.

 

3. 스택(Stack) 영역 🌀

  • 역할: 각 쓰레드별로 실행되는 메서드 호출 정보를 저장합니다.
  • 내용:
    • 메서드 호출 시 생성되는 지역 변수
    • 메서드 호출과 반환 정보
  • 특징:
    • 쓰레드마다 독립적으로 할당됩니다.
    • FILO(First-In, Last-Out) 구조를 따릅니다.

 

4. PC 레지스터(Program Counter Register) 영역 🧮

  • 역할: 쓰레드가 현재 실행 중인 JVM 명령어의 주소를 저장합니다.
  • 특징:
    • 쓰레드마다 고유한 PC 레지스터를 갖습니다.
    • JVM이 명령어를 순차적으로 실행할 수 있도록 돕습니다.

 

5. 네이티브 메소드 스택(Native Method Stack) 영역 🛠️

  • 역할: 자바 외의 네이티브 코드(C/C++ 등) 실행을 지원합니다.
  • 내용:
    • 네이티브 메서드 호출 시 필요한 메모리
  • 특징:
    • 네이티브 메서드 호출에 필요한 데이터를 관리합니다.