블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
JVM
Java Virtual Machine
의 약자.
Java 프로그램이 플랫폼에 의존하지 않고, 어디서든 동작 가능하도록 하기 위한 Java 가상 머신이다.
- 단, Java 프로그램은 JVM 위에서 동작하기 때문에, JVM에 의존성을 가짐
C/C++
언어는 CPU 아키텍처, 운영체제 등 플랫폼 환경에 의존성을 가지기 때문에, 플랫폼이 바뀌면 제대로 동작하지 않는 문제가 있음 (크로스 컴파일을 통해, 타겟 플랫폼에 맞춰서 컴파일을 해줘야 함)
- Java의 경우 이러한 문제를 해결하기 위해 JVM을 만들었음
JVM 아키텍처
JVM은 아래와 같이 크게 Class Loader
, Runtime Data Area
(JVM 메모리), Execution Engine
으로 나눠짐
Class Loader
Java 바이트 코드(.class
파일)를 Runtime Memory Area
에 적재(load
)하는 역할을 함
Runtime Memory Area
사실 이부분이 제일 중요하다고 보는데, JVM 메모리를 Runtime Memory Area
라고 부름
Runtime Memory Area는 5가지 영역으로 나눠짐
Method Area
: 클래스 데이터,static
변수가 저장되는 공간Heap Area
: (new
연산자를 통해) 동적으로 생성되는 객체가 저장되는 공간Stack
: 프레임(Frame
)이 저장되는 공간Frame
: 메소드 데이터가 저장되는 공간 (메소드 파라미터, 지역변수, 참조 주소값 등)
PC Register
:JVM
이 현재 실행한 명령어의 주소를 저장Native Method Area
: Java 바이트코드가 아닌 C/C++ 언어가 실행되기 위해 필요한 공간 (성능 향상을 위해 C/C++을 사용하는 경우가 있음)
자세한 내용은 아래 참고
2021/03/07 - [Language/JAVA] - JVM 메모리 (Runtime Data Area)
Execution Engine
Method Area
의 바이트 코드를 Execution Engine
에 제공하여 바이트 코드를 실행함.
- 쉽게 바이트 코드를 실행하는 엔진이라고 할 수 있음
Execution Engine
이 실행하는 방식에는 2가지가 있음
Interpreter
방식- 인터프리터 방식은 바이트 코드를 한 줄씩 해석하고 실행함. 하지만 속도가 느리다는 단점이 있음
JIT
방식Just In Time
의 약자로, 기존 인터프리터 방식의 느리다는 단점을 극복하기 위한 방법- 컴파일 방식과 인터프리터 방식을 혼합한 방식을 이용함
- 명령어 한 줄을 컴파일 하여 기계어(
Native Code
)로 변환하여 실행함 - 또한, 캐싱 기능이 있어서 똑같은 명령어의 경우는 캐싱하여 바로 실행함
반응형
'Language > JAVA' 카테고리의 다른 글
JVM GC(Garbage Collector) 구조 (0) | 2021.03.07 |
---|---|
JVM 메모리 (Runtime Data Area) (0) | 2021.03.07 |
Java - 연산자의 종류 (증감/부호/산술/논리/비교/대입 연산자) (0) | 2021.02.03 |
Java - 형 변환 (Type Conversion) (0) | 2021.02.03 |
Java - 상수와 리터럴 (Constant & Literal) (0) | 2021.02.03 |