JVM
Java Virtual Machine
, JVM
이란?⌗
자바 응용 프로그램을 실행시키기 위한 가상 머신으로 자바를 실행시키기 위한 프로그램
일반적으로 다른 프로그래밍 언어의 경우,
컴파일러를 통해 컴파일할 때, 특정 시스템에 종속적인 결과물이 나오게 되어 있다
반면, Java
컴파일러는 JVM
, Java Virtual Machine
에 대한 결과물을 생성한다.
이를 통해, 다른 플랫폼이나 환경이 다를 지라도 JVM
만 있다면 동일한 결과물을 얻을 수 있게 되었다.
좀 더 자세히 살펴보자면
Java 컴파일러는 .java
파일을 .class
파일로 컴파일을 하게 되는데
이 .class
파일이 JVM
에 입력되어 로드되고 실행되게 된다.
JVM의 구조⌗
위 구조도를 참고하여 보자면
JVM
은 크게 세가지 영역으로 이루어져 있다.
- 클래스 로더
ClassLoader Subsystem - 런타임 데이터 영역
Runtime Data Area - 실행 엔진
Execution Engine
각각 영역에 대한 자세한 내용은 차차 다루도록 하고
무슨 역할을 하는지 간략하게 알아보자
클래스 로더⌗
자바의 경우 동적으로 클래스를 읽어온다. Dynamic Class Loading 동적 클래스 로딩
런타임 상에 모든 코드가 JVM 상에 링크된다는 것인데, 좀 더 풀어서 설명하자면
앞서 설명처럼
자바 프로그램이 실행될 때, 컴파일된
class
파일로 입력되고 실행
해당 역할을 담당하는 시스템 모듈이다.
런타임 데이터 영역⌗
흔히 말하길 메모리 영역
이라고도 불리는 영역이다.
JVM 상에서 사용되는 데이터들을 적재하는 영역
메소드, 힙, 스택, PC Register, 네이티브 메소드 스택(JNI
) 등이 있다.
실행 엔진⌗
런타임 데이터 영역에 할당된 바이트코드를 실행시킨다.
실행 엔진은 바이트 코드를 읽어 명령어 단위로 실행시킨다.
명령어 실행은 두 방식으로 나뉘어 실행되는데
- 인터프리터
- JIT 컴파일러
이 두가지 방식으로 실행된다.
추가적으로 실행엔진에서 GC
라고 흔히 부르는
Garbage Collector
가 동작하여 불필요한 리소스를 반환한다.
JRE? JDK?⌗
JVM 구현체를 포함한 녀석들이다.
흔히 말하는 자바 다운로드
, 자바 개발 환경 설정
을 할때, 나오는 녀석들
- JRE
J
avaR
untimeE
nvironment 자바 실행 환경의 약자JVM
+Library
- 실행 관련 핵심 부분을 포함하고 있다
- 개발 관련 도구 ❌
- JDK
J
avaD
evelopmentK
it 자바 개발도구의 약자- JRE + 개발 관련 도구
자바 코드 실행 흐름⌗
- 프로그램 실행
JVM
이OS
로부터 메모리 할당
이 때 JVM이 할당 받은 메모리를 여러 영역으로 나누어 관리- 자바 컴파일러가
class
파일로 컴파일 클래스 로더
를 통해JVM
으로 로딩- 로딩된
class
파일은실행 엔진
을 통해 해석 및 실행