웹(WEB)/자바(Java)

[Java] 자바 JVM 메모리 구조

마달랭 2024. 12. 28. 00:14

개요

JVM(Java Virtual Machine)은 자바 프로그램이 실행될 때 메모리를 관리하고 운영하는 가상의 머신이다.

JVM의 메모리 구조는 크게 5가지 영역으로 나뉜다.

  • 메소드(Method) 영역
  • 힙(Heap) 영역
  • 스택(Stack) 영역
  • PC 레지스터(PC Register)
  • 네이티브 메소드 스택(Native Method Stack)

🎯 JVM 메모리 구조 흐름

  1. 클래스 로딩 – 메소드 영역에 클래스 정보 로드
  2. 객체 생성 – 힙 영역에 객체 생성 (new 연산자)
  3. 메소드 실행 – 스택에 메소드 호출 정보 저장
  4. PC 레지스터 – 현재 실행 중인 명령어 추적
  5. 네이티브 메소드 호출 – 네이티브 메소드 스택에서 처리

이 중 메소드, 힙, 스택 영역에 대해서 알아보자

 

 

메소드(Method) 영역

정적(Static) 메모리 영역으로 클래스와 관련된 정보를 저장

프로그램이 시작될 때 로드되며, JVM이 종료될 때까지 유지

 

[저장 내용]

 

  • 클래스 메타데이터 (클래스, 인터페이스 정보)
  • 정적 변수 (static 변수)
  • 상수 풀 (Constant Pool)
  • 메소드 및 생성자 정보

 

모든 스레드에서 공유되며, 메모리 누수가 발생할 경우 OutOfMemoryError: Metaspace가 발생

 

 

힙(Heap) 영역

객체를 저장하기 위한 영역이며, 스레드 간 공유된다.

 

  • 동적 메모리 영역으로 객체와 배열 저장
  • new 키워드로 생성된 객체는 힙에 할당
  • GC(Garbage Collector)에 의해 관리

 

메모리가 부족하면 OutOfMemoryError: Java Heap Space가 발생

 

 

스택(Stack) 영역

메소드 호출 시마다 생성되며, 지역 변수와 메소드 호출 정보(프레임)가 저장

메소드 실행이 끝나면 프레임이 제거

 

[저장 내용]

 

  • 메소드 호출 스택
  • 지역 변수, 매개변수
  • 리턴 주소

 

스레드마다 별도로 존재하며, 메모리 부족 시 StackOverflowError가 발생

 

728x90