케네스로그

[Java] JVM 아키텍처(2) - 런타임 데이터 영역 Runtime Data Area 본문

Dev/Java

[Java] JVM 아키텍처(2) - 런타임 데이터 영역 Runtime Data Area

kenasdev 2021. 10. 13. 12:09
반응형

이전 글에서는 JVM의 아키텍처와 클래스로더에 대해 알아보았다. 이번글에서는 JVM에서 실제로 변수를 저장/활용할 수 있는 공간인 런타임 데이터 영역에 대해 알아보자.

 

런타임 데이터 영역(Runtime Data Area)

자동차가 달리기 위해선 도로가 필요로 하며, 기차가 움직이기 위해선 레일이 필요하다. Java프로그램을 실행하기 위해서는 클래스파일을 저장/실행하기 위해 컴퓨터 내부의 메모리 공간이 필요하다. 이것을 담당하는 것이 JVM의 Runtime Data Area이다. 이것은 5개의 영역으로 나누어진다.

 

 

 

 

 

1. 메소드영역(Method Area)

모든 클래스 레벨의 데이터가 저장된다.

Person이라는 클래스의 멤버로 isLive라는 변수가 정의되어있다. 이 때, Method area에는 이러한 클래스 멤버 변수인 isLive가 저장된다.

 

 

 

 

 

2. 힙 메모리(Heap Memory)

모든 객체와 인스턴스 변수가 저장된다.

Person클래스를 기반으로 p1이라는 객체를 생성했다. 이렇게 생성된 객체는 heap memory에 저장된다.

 

 

 

 

 

 

 

3. 스택 메모리(Stack Memory)

스택 메모리는 3가지로 나누어볼 수 있다.

  • Local Variable
  • Operand Stack: 메소드 내부의 모든 연산자
  • Frame Data: 예외처리를 위한 try/catch블록

 

 

 

 

 

 

4. PC Register

현재 실행중인 명령이 저장된다.

 

 

 

 

 

 

5. Native Method Stack

다른 언어로 작성된 라이브러리의 메소드들이 저장된다.

 

 

 

 

반응형