JVM이란?
자바를 실행시키기 위한 가상 기계
Java Virtual Machine 즉, 자바 가상 머신 이라는데,, 이게 뭐하는 녀석일까?
우리가 이클립스 등의 JAVA 프래임워크를 사용하여 코드를 작성했다고 가정해보자.
System.out.println("hello world");
그리고 실행해서 결과를 보려한다.
이를 위해선, 사용자가 작성한 자바 코드를 컴퓨터가 알아들어야 한다.
우리가 쓰고있는 JAVA같은 언어는 컴퓨터를 위한 언어가 아닌 사람을 위한 언어이기 때문이다.
(컴퓨터는 못알아들음)
다시말해
고급언어(사람이 이해하는)인 자바언어를 저급언어(기계어)인 0과 1로된 코드로 바꾸는 작업이 필요하다.
(컴퓨터는 0과 1만 알아들으니까!)
저급언어로 바뀌려면 다음과정을 거치게 된다.
1. 우리가 작성한 자바코드가 담긴 A.java 파일을 실행시킨다.
2. 실행시 자바 컴파일러를 통해 A.Java 파일이 자바 바이트코드로 구성된 A.class 파일로 변환된다.
- 컴파일러란? (같이 따라오는 친구인 인터프리터란?)
컴파일 : 사람이 이해하는 언어를 컴터가 이해하는 언어로 바꿔주는 행위.
컴파일러 : 런타임 이전에 코드 모든 줄을 컴파일 해버리는 녀석.
인터프리터 : 런타임 때 코드 한줄 컴파일 하고 실행, 한줄 컴파일 하고 실행.. 시키는 녀석.
여기선 자바 컴파일러이기 때문에 고급언어와 저급언어의 중간쯤되는 자바 바이트코드를 만들어낸다. - 자바 바이트코드?
왜 바로 0,1로 구성된 기계어로 안바꾸고 굳이굳이 자바 바이트 코드로 바꿀까?
쉽게 얘기해서 운영체제 호환성 때문이다.
운영체제 공부를 해보신분들이라면 알겠지만 운영체제의 종류는 여러가지가 있다(윈도우, 리눅스, 안드로이드 등등..)
운영체제마다 알아듣는 명령어가 다르기때문에, C언어 코드를 컴파일시켜 나온 기계어 A가 윈도우에서는 잘 돌아가도, 윈도우만 알아듣는 기계어 A이기 때문에 이것을 리눅스 운영체제는 이해하지 못한다.
이러한 호환성 문제를 해소하기 위해 해성처럼 등장한 언어가 JAVA다.
아래 그림처럼 운영체제 종류에 따른 JVM을 설치하면 어떤 운영체제든 JAVA코드를 이해할 수 있다.

3. JVM이 자바 바이트코드인 A.class 파일을 해석해 운영체제가 이해할 수 있는 기계어로 바꾼다.
- JVM 내부에 있는 JIT(just in time) 컴파일러를 사용해 기계어로 번역해줌
정리.
정리해보면, JVM이란 자바 바이트코드를 기계어로 번역해 사용자가 작성한 코드를 실행시켜주는 녀석이고
JVM의 존재 이유는 운영체제들의 호환성을 높여주기 위해서, 운영체제의 종속적이 않기 위해서 라고 보면 될것같다.
매우 간단하게 설명했지만서도 전체적인 느낌과 JVM의 역할에 어느정도 그릴 수 있으리라 생각한다..!
학부생 레벨에서 쓴 글로, 다소 부족한 부분이 있을 수 있으니 친절한 피드백을 매우 환영합니다.
'Android' 카테고리의 다른 글
| [Android] Fragment의 정의와 필요성, Lifecycle 및 이에 따른 대응. (0) | 2023.06.25 |
|---|---|
| [Android] Activity Lifecycle 과 화면회전 시 변화 (0) | 2023.06.22 |
| [Android] Activity 가 있는데 Fragment는 왜 써? (0) | 2023.06.05 |
| [Android] 메모리 영역과 JVM Garbage Collecter (JVM, DVM, ART) (0) | 2023.05.22 |
| [Android] JVM, DVM, ART (2) | 2023.05.19 |