본문 바로가기

개발/java

[JAVA] JVM이란?

 

JVM이란 무엇인가
컴파일 하는 방법
실행하는 방법
바이트코드란 무엇인가
JIT 컴파일러란 무엇이며 어떻게 동작하는지
JVM 구성 요소
JDK와 JRE의 차이

 

 

JVM이란 무엇인가

JVM(java virtual machinie)은 자바 가상 머신이다.

JVM은 프로그램과 운영체제 사이에 위치하여 자바 언어의 프로그램이 운영체제에서 실행될 수 있도록 존재하는 가상 머신이다.

JVM은 자바의 대표적 특징 중 하나라고 할 만큼 비중이 큰 프로그램이다.

자바의 대표적 장점을 꼽으라고 하면 이식성이 뛰어나다는 점인데 바로 이것에서 비롯되는 말이다.

다른 언어와 달리 해당 플랫폼(OS)에 맞는 JVM만 설치한다면 해당 소스 코드를 수정하지 않아도 호환되기 떄문이다.

 

컴파일 하는 방법

c언어 같은 경우, 컴파일 후 해당 프로그램이 이진 코드로 변화 -> 링크를 통해 라이브러리와 결합하게 되고 -> exe실행파일로 변환되어 메모리에 올라가며 실행하게 된다.

반면, 자바에서 컴파일 과정은 자바 컴파일러가 바이트 코드로 변환하게 된다. 

 

바이트 코드란 무엇인가

바이트 코드란 JVM이 이해할 수 있는 0과1로 구성된 코드를 말한다.

자바 소스 코드를 자바 컴파일러가 컴파일하여 만들어진다.

 

실행하는 방법 

1. 자바 소스코드를 컴파일러가 컴파일하여 바이트 코드로 변환한다.

2. JVM의 클래스 로더가 바이트 코드를 동적으로 JVM메모리 영역으로 load한다. 

3. Execution Engine이 로드된 바이트 코드를 해석한다. 이 과정에서 바이트 코드가 이진 코드로 변환한다.

4. 변환된 이진 코드를 OS가 실행시킨다.

 

 

JIT 컴파일러란 무엇이며 어떻게 동작하는지 

JIT컴파일러란 바이트 코드를 이진 코드로 실시간으로 바꿔주는 것이다.

여기서 실시간이라는 말은, 모든 바이트 코드를 이진 코드로 다 바꾸는 작업이 아니라 그때그떄 동적으로 한다는 의미를 가진다.

JIT를 통해 JVM에 올라와 있는 바이트 코드를 이진 코드로 변환한 후 이것을 OS가 실행하게 된다.

 

 

JVM의 구성 요소

 

 

 

 

 

JDK와 JRE의 차이

JRE는 자바 런타임 환경으로써 자바 프로그램을 실행하기 위해 필요한 것들을 가지고 있다.

JVM, 자바 패키지 클래스, 런타임 라이브러리가 포함되어 있다.

JRE로 자바 프로그램을 실행할 수는 있지만 자바 프로그래밍을 하지는 못한다. 이유는 자바 실행 환경만 가지고 있기 때문이다.

 

JDK는 자바 개발 키트이다. JDK는 JRE + 개발/디버깅 툴로 구성되어있다.

JRE는 자바 프로그래밍을 할 수는 없지만 JDK는 자바를 실행하고, 프로그래밍까지 할 수 있다.

 

 

 

 

터미널로 컴파일 하는 법.

위에서 자바를 실행하는 방법에 대해 알아보았다.

개발자가 작성한 자바 코드(사람이 읽을 수 있는)를 컴파일하여 바이트코드로 변환 후, JVM이 그것을 실행시킨다.

JVM이 실행시키는 과정은 클래스 로더가 동적으로 JVM메모리 영역으로 load하게 된다.

 

하지만 코드 -> 바이트코드 -> 실행 과정에서 속도가 느려지게 된다. 그래서 JIT(Just In Time)방식을 사용한다.

JIT란 자주 쓰는 코드들을 기계어로 변환시켜 저장해 두었다가, 재사용하는 것이다. (자바 컴파일러랑은 관련이 없고, 자바를 실행할 때의 얘기이다.)