JVM 내부 구조

Timo·2022년 8월 11일
0

Class Loader

클래스 로더는 *.class 파일을 JVM 메모리로 읽어들이는 역할을 한다

클래스 로더(Class Loader)를 통해 클래스 파일(자바 바이트 코드)을 읽어들인다.
클래스 파일 안에는 클래스 안에 어떤 필드(field)가 몇 개 선언되어 있는지, 메소드(method)는 몇 개고 이름은 무엇인지, bytecode를 포함한 클래스에 대한 모든 정보가 들어있다.

클래스 로더 시스템은 이 클래스 파일 정보를 메모리(Method Area)에 올리고, 검증하고, static(정적, 컴파일 이후 변하지 않는) 변수들을 초기화하는 등의 역할을 합니다.

-> 클래스 파일에 들어있는 정보가 클래스 로더에 의해 Method Area에 올라간다.

클래스 파일 안에는 바이트코드(Bytecode)라는 것도 있다. 이는 JVM이 해석할 수 있는 명령어의 집합이다. JVM의 목적은 바이트 코드를 기계어로 번역해서 CPU에게 일을 시키는 것이다. 바이트 코드를 기계어로 번역하는 일은 실행엔진(Execution Engine)에 있는 인터프리터(Interpreter)가 수행하게 된다.

Runtime Data Area

JVM이 실행중에 사용하는 메모리 공간

Method Area

클래스와 관련된 정보들이 저장되는 공간이다.

Heap

런타임에 생성되는 모든 객체들이 저장되는 공간이다.

💡 Method AreaHeap 영역은 모든 스레드가 공유하는 영역이므로 멀티쓰레드 프로그래밍을 할 때 동기화에 주의해야 하는 영역이다.

JVM Stacks

메서드를 실행하기 위한 정보들이 저장되는 공간이다.
내부에는 프레임이라는 자료구조가 들어가 있으며 프레임은 메서드가 호출될 때마다 생기고 메서드가 끝나거나 예외가 발생하면 사라진다.

Frame 구조

  • 현재 클래스의 Constant Pool에 대한 참조
  • 지역 변수 배열(Local Variables Array)
  • 피연산자 스택(Operand Stack)

PC Registers

쓰레드가 현재 실행하고 있는 명령어의 주소를 저장한다.
쓰레드 간의 컨텍스트 스위치 때문에 존재하는 공간이라 할 수 있다.

Native Method Stacks

C나 C++로 작성된 메서드를 실행할 때 사용되는 스택 영역이다.

💡 JVM Stacks & PC Registers & Native Method Stacks
이 세 영역은 쓰레드가 생성될 때마다 같이 생성되고, 서로 다른 쓰레드가 침범할 수 없는 영역이다.

참고 자료

https://youtu.be/GU254H0N93Y
JVM에 관하여 - Part 3, Run-Time Data Area

profile
나는 매일 성장하는 사람

0개의 댓글