# JVM이란?
Java Virtual Machine의 줄임말로 '자바(Java) 언어 실행용 가상 머신'이다.
기본적으로 컴퓨터의 CPU는 Java 소스코드로 작성된 파일(= *.java)을 인식하지 못한다. CPU가 인식하려면 기계어로 컴파일(=번역?) 해줘야 하는데 Java 언어의 특징 중 하나인 'Java는 OS에 종속적이지 않다'는 점을 실현시켜 주는 역할이 바로 JVM이다.
즉, Java소스 파일( *.java ) 작성 -> JVM에서 Java파일 컴파일( *.java -> *.class) -> 어느 OS든 JVM 위에서 컴파일된 *.clss파일 실행 가능
*Java compiler
=> *.java파일을 *.class라는 Java bytecode로 변환해 준다는 뜻이다.
=> JDK를 설치하면 bin에 존재하는 javac.exe를 말한다. (즉, JDK에 Java compiler가 기본 내재)
javac 명령어를 통해 .java를 .class로 컴파일할 수 있다.
# JVM 구성
JVM은 크게 아래와 같이 이루어져 있다.
- 클래스 로더(Class Loader)
- 로딩(Loading)
- 링크(Linking)
- initializaion
- 실행 엔진(Execution Engine)
- 인터프리터(Interpreter)
- JIT 컴파일러(Just-in-Time)
- 가비지 콜렉터(Garbage collector)
- 런타임 데이터 영역 (Runtime Data Area)
## 클래스 로더(Class Loader)
JVM 내로 클래스 파일(*.class)을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다.
런 타임시 동적으로 클래스를 로드하고 jar 파일 내 저장된 클래스들을 JVM 위에 탑재한다.
즉, 클래스를 처음으로 참조할 때, 해당 클래스를 로드하고 링크하는 역할을 한다.
## 실행 엔진(Execution)
클래스를 실행시키는 역할이다. 클래스 로더가 JVM내의 런타임 데이터 영역에 바이트 코드를 배치시키고, 이것은 실행 엔진에 의해 실행된다.
자바 바이트 코드(*.class)는 기계가 바로 수행할 수 있는 언어보다는 비교적 인간이 보기 편한 형태로 기술된 것이다. 그래서 실행 엔진은 이와 같은 바이트 코드를 실제로 JVM 내부에서 기계가 실행할 수 있는 형태로 변경한다.
↳ 인터프리터(Interpreter)
실행 엔진은 자바 바이트 코드를 명령어 단위로 읽어서 실행한다.
하지만 한 줄씩 수행하기 때문에 느리다는 단점이 있다.
↳ JIT(Just-In-Time)
인터프리터 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 컴파일하여 기계어로 변경하고, 이후에는 해당 더 이상 인터프리팅 하지 않고 기계어로 직접 실행하는 방식이다. 자세히
## 가비지 콜렉터
더 이상 사용되지 않는 인스턴스를 찾아 메모리에서 삭제함.
'Study > Java' 카테고리의 다른 글
[JAVA] JAVA 8 버전(1.8.0)에 대하여 (0) | 2023.06.16 |
---|---|
[JAVA] Class란? (0) | 2022.05.29 |
[JAVA] 생성자 (0) | 2022.05.29 |
[JAVA] 객체(=Instance) 개념 잡기! (0) | 2022.05.27 |
[JAVA] 메소드(=Method)에 대하여 (0) | 2022.05.27 |
댓글