여름의 서재

[JAVA] JVM & JVM 메모리 구조 본문

Skill/JAVA

[JAVA] JVM & JVM 메모리 구조

엉아_ 2022. 1. 23. 19:46
728x90

💡 JVM 이란?

: 자바가상머신. 자바와 운영체제 사이에서 중개자 역할을 수행하여, 자바가 운영체제에 구애 받지 않고 프로그램을 실행 할 수 있도록 도와줌. 또한 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행.

 

💡 자바 프로그램의 실행과정

  1. 자바 컴파일러를 통해 자바 클래스 파일(.java)를 자바바이트코드(.class)로 변환한다.
  2. 클래스 로더를 통해 자바 바이트코드를 JVM 런타임 데이터 영역에 로드한다.
  3. 실행 엔진을 통해 실행한다.

💡 JVM 메모리 구조

1. Class Loader(클래스 로더)

: JVM 내로 클래스 파일을 로드하고, 링크를 통해 작업을 수행하는 모듈. 런타임 시에 동적으로 클래스를 로드함.

 

2. Execution Engine(실행 엔진)

: JVM 내의 Runtime 데이터 영역에 배치된 바이트 코드들을 명령어 단위로 읽어서 실행.

 

📌 JVM이 나왔을 당시에는 인터프리터 방식이었기때문에 속도가 느리다는 단점이 있었지만 JIT 컴파일러 방식을 통해 이 점을 보완하였습니다. JIT는 바이트 코드를 어셈블러 같은 네이티브 코드로 바꿈으로써 실행이 빠르지만 역시 변환하는데 비용이 발생하였습니다. 이 같은 이유로 JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않고, 인터프리터 방식을 사용하다가 일정한 기준이 넘어가면 JIT 컴파일러 방식으로 실행합니다.

 

3. Garbage Collector

: 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할

 

4. Runtime Data Area

: JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역

 

- method area

: 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드를 보관

 

- Heap area

: new 키워드로 생성된 객체와 배열이 생성되는 영역. 또한, 메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역

 

- Stack area

: 메서드 호출 시 생성되는 스레드 수행 정보를 기록한다. 임시 데이터를 저장, 메서드 수행이 끝나면 프레임별로 삭제

 

- PC Register

: 쓰레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재합니다. 쓰레드가 어떤 부분을 무슨 명령으로 실행해야할 지에 대한 기록을 하는 부분

 

- Native method stack

: 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역

 

 

'Skill > JAVA' 카테고리의 다른 글

[JAVA] Garbage Collection  (0) 2022.01.23
Comments