본문 바로가기
Java

[Java] JVM 구조

by 대우니 2022. 5. 2.
728x90
반응형

2021.05.25 - [Java] - [Java] JDK & JRE & JVM

 


 

JVM 개요

데이터 영역의 메모리 레이아웃이나 GC에 사용되는 알고리즘, JVM 명령어 실행과 관련된 내부의 최적화(e.g. 기계어로 번역하는 과정) 개발자 재량

JVM 구조

Class loader

JVM 내로 클래스파일을 로드하고 연결하는 작업을 수행하는 역할을 한다.

사실 JRE에 속해있지 JVM에 속해있지는 않는다.


Execution engine(실행 엔진)

클래스를 실행시키는 역할을 한다.

자바 바이트 코드를 실제로 JVM 내부에서 기계가 실행할 수 있는 형태로 변경한다.


JIT(Just In Time)

인터프리터 방식의 단점을 보완하기 위해 도입된 컴파일러다.

인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일하여 네이티브 코드로 변경하고,
이후에는 더 이상 인터프리팅 하지 않고 네이티브 코드로 직접 실행하는 방식이다.
네이티브 코드는 캐시에 보관하기 때문에 한 번 컴파일된 코드는 빠르게 수행하게 된다.
JIT 컴파일러를 사용하는 JVM들은 내부적으로 해당 메서드가 얼마나 자주 수행되는지 체크하고,
일정 정도를 넘을 때에만 컴파일을 수행한다.

 

Garbage collector

GC를 수행하는 모듈이 있다.


Runtime Data Area

PC Register

Thread가 어떤 부분을 어떤 명령으로 실행해야할 지에 대한 기록을 하는 부분으로 현재 수행 중인 JVM 명령의 주소를 갖는다.


JVM 스택 영역

프로그램 실행과정에서 임시로 할당되었다가 메소드를 빠져나가면 바로 소멸되는 특성의 데이터를 저장하기 위한 영역이다.
메서드 호출시마다 각각의 스택 프레임(그 메서드만을 위한 공간)이 생성된다.
메서드 수행이 끝나면 프레임 별로 삭제를 한다.


Native method Stack

 자바 프로그램이 컴파일되어 생성되는 바이트 코드가 아닌 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역이다.
JAVA가 아닌 다른 언어로 작성된 코드를 위한 공간이다.


Method Area

클래스 정보를 처음 메모리 공간에 올릴 때 초기화 되는 대상을 저장하 기 위한 메모리 공간이다.
올라가는 정보의 종류로는 멤버변수의 이름, 데이터 타입, 접 근 제어자에 대한 정보 등이 있다.


힙영역

객체를 저장하는 가상 메모리 공간이다. New 연산자로 생성된 객체와 배열을 저장한다.

 

참조: https://www.youtube.com/watch?v=6reapO0gLPs 

https://siahn95.tistory.com/entry/Java-JVM%EC%9D%B4%EB%9E%80-3-JVM%EC%9D%98-%EB%91%90-%EA%B0%80%EC%A7%80-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C

 

 

 

반응형

'Java' 카테고리의 다른 글

객체지향 5원칙 - SOLID  (0) 2024.04.01
[Java] JDK & JRE & JVM  (0) 2021.05.25