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)
JVM 메모리 (Runtime Data Area)
Runtime Data Area JVM 메모리를 뜻함 Runtime Data Area 는 5개 영역으로 나눠짐 Method Area , Heap , Stack , PC Register , Native Method Area Method Area 와 Heap 은 모든 스레드가 공유하는 공간 Stack ,..
memostack.tistory.com
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 |