본문 바로가기
Java

[JAVA] 자바 가상머신 JVM(Java Virtual Machine) 이란?

by 2nyong 2023. 3. 25.

JVM(Java Virtual Machine) 이란?

JVM은 자바 프로그램 실행환경을 만들어 주는 소프트웨어다. 자바 코드(.java)를 컴파일하여 바이트 코드(.class)로 만 변환하면 이 코드는 JVM에서 실행된다. JVM은 자바 실행 환경(JRE; Java Runtime Environment)에 포함되어 있다.

 

바로 실행 파일(.exe)를 만들지 않고 위와 같은 방식으로 처리할 때 얻을 수 있는 가장 큰 이점은 하나의 바이트 코드(.class)로 모든 플랫폼(윈도우, 리눅스 등)에서 실행할 수 있다는 것이다. 이렇게 동작할 수 있는 이유는 JVM이 생성된 바이트 코드를 실행하는 컴퓨터의 운영체제에 맞는 실행 파일로 변경해주기 때문이다.

 

Java는 플랫폼에 종속적이지 않지만 JVM은 플랫폼에 종속적이다.

Java는 컴파일된 바이트 코드를 활용하면 어떤 JVM에서도 실행할 수 있기 때문에 플랫폼에 의존적이지 않다. 하지만 JVM은 플랫폼에 의존적이고, 리눅스의 JVM과 윈도우의 JVM은 서로 다르다.

 

Java의 실행과정

https://coding-factory.tistory.com/827

  1. 사용자가 자바 코드(.java)를 작성하고 자바 컴파일러(javac)에게 컴파일 명령을 내리면 바이트 코드(.class) 파일이 생성된다.
  2. 바이트 코드(.class)는 클래스 로더를 통해 JVM Runtime Data Area로 로딩되고 로딩된 바이트 코드(.class)를 실행할 컴퓨터에 설치된 JVM에게 전달하면, 해당 컴퓨터가 이 코드를 실행할 때 JVM이 실시간으로 기계어로 해석한다.

 

JVM과 바이트 코드

JVM은 바이트 코드(.class)를 명령어 단위로 읽어서 해석하는데, Interpreter 방식과 JIT 컴파일 방식을 혼합해 사용한다. 

 

- Interpreter 방식

  • Interpreter 방식은 바이트 코드(.class)를 line 별로 해석하고 실행하는 방식이다.
  • 초기 방식이며, 속도가 느리다는 단점이 있다.

 

- JIT (Just In Time) 캄파일 방식

  • Interpreter 방식의 느린 속도를 보완하기 위해 나온 컴파일 방식
  • 바이트 코드(.class)를 JIT 컴파일러를 이용해 프로그램을 실제 실행하는 시점에 각 운영체제에 맞는 Native Code로 변환하여 실행 속도를 개선하였다.
  • 바이트 코드(.class)에서 Native Code로 변환하는데도 시간이 소요되므로, JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않는다.
  • JIT 컴파일러는 같은 코드를 매번 해석하지 않고, 처음 실행할 때 컴파일을 하면서 해당 코드를 캐싱한다.
  • 이 후, 변경된 부분만 컴파일하고 나머지는 캐싱된 코드를 사용한다.

 

 

댓글