[JAVA] JVM메모리 구조

노성빈·2024년 3월 13일

JAVA

목록 보기
8/11

JVM메모리 구조

JVM메모리 구조는 크게 5종류로 나눌 수 있다.

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

📌 Method Area

❗️ 자바에서 사용되는 상수와 클래스에 대한 정보, 메서드가 저장되는 영역이다.

  • 클래스의 생성자와 메소드를 저장한다.
  • 바이트 코드와 메타데이터를 저장한다.
  • 모든 스레드에서 접근 가능하다.
  • 클래스 파일이 로드될 때 초기화 된다.

Runtime Constant Pool

메소드, Class가 호출되면 이 영역을 참조한다.
이 영역에 Constant Pool이 저장된다.

Constant Pool?

❗️ Stack이나 Heap에서 상수, 함수, 클래스등 필요한 요청이 오면 해당 주소값, 상수값을 여기서 찾는다.

  • 상수값과 메소드 호출, Class호출을 하면 참조해야할 위치를 저장한다.

📌 Stack Area

❗️프로그램에서 메소드가 호출될 때 메소드의 스택 프레임이 저장되는 영역이다.

  • 메소드를 호출할 때 push와 초기화, 종료시 pop을 한다.
  • 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장한다.
  • 각 스레드마다 하나씩 호출된다.

Stack 프레임

  • 메서드가 호출될 대마다 프레임을 하나씩 생성하고, 메서드가 끝나면 프레임을 지운다.
  • Local Variables Array: 지역변수, 메소드 호출 정보, 자신에 대한 참조가 저장된다.
  • Operand Stack: 스택 내에서 이루어지는 연산들을 위해 임시로 값을 저장하는 공간이다.

메소드를 호출하면?

  • Static 메소드를 호출하면, Current Class Constant Pool에 있는 주소를 읽는다.
  • 일반 메소드를 호출하면, 해당 클래스로 가서 메소드의 Constant Pool 주소를 찾아 읽는다.
  • 주소를 참조해 Run Time Constant Pool로 가서 메소드 정보를 읽어온다.
  • 메소드 정보를 바탕으로 Stack에 프레임을 새로 만든다.
  • 생성자를 호출한 경우 인스턴스를 heap에 생성한다.

스레드란?

📌 Heap Area

❗️자바 프로그램에서 사용되는 인스턴스 변수가 저장되는 영역이다.

  • new 연산자로 생성된 모든 object와 인스턴스 변수, 배열 등을 저장한다.
  • 가비지 컬렉터의 관리 대상이며, 모든 스레드에서 접근 가능하다.
  • 객체가 생성될 때 초기화가 된다.
  • String Constant Pool에서 String 인스턴스를

📌 PC Register

  • Program Counter의 줄임말이다.
  • 스레드의 실행 중인 상태 정보를 저장한다.
  • 즉, 현재 실행할 차례인 명령어의 위치를 기록한다.

📌 Native Method Stack

  • 기계어로 작성된 프로그램을 실행시키는 영역이다.
  • 보통 C, C++로 작성된 코드를 함께 실행시키기 위한 공간이다.

reference
https://steady-coding.tistory.com/305
https://www.youtube.com/watch?v=GU254H0N93Y
https://wonit.tistory.com/589

0개의 댓글