가상 머신(virtual machine)이라는 것은 소프트웨어로 작성된 기계 (영어권에서는 컴퓨터 하드웨어를 machine이라고 지칭하기도 한다.) 즉, 코드로 작성된 가상의 물리적인 하드웨어라는 의미이다. 가상 머신은 컴퓨터 안에 존재하는 소프트웨어로 구현된 컴퓨터를 의미하며 광범위하게 사용되고 있는 기술 분야이다.


[그림 1] 윈도 머신에서 가상 머신으로 데비안 리눅스를 실행하고 있는 모습


 자바 가상 머신 (java virtual machine, JVM)은 자바 애플리케이션을 수행하기 위한 가상 머신이다. 일반적으로 보통의 응용 프로그램은 운영 체제를 거쳐서 물리적인 머신(machine)에서 수행된다.


[그림 1] 일반적인 응용 프로그램의 수행 단계


하지만 자바 애플리케이션은 운영 체제와 물리적인 머신이 아니라 JVM 위에서만 수행되고 그 밑단의 모든 동작은 JVM이 알아서 처리하는 방식으로 동작한다. 따라서 자바로 작성된 프로그램은 윈도우즈용 JVM이 설치된 윈도 머신에서도 동작하며 맥용 JVM에 설치된 맥 머신에서도 동일한 코드가 동일하게 수행된다.(Write once, run everywhere.)


[그림 2] 자바 가상 머신에서의 자바 프로그램 동작 단계


윈도만을 혹은 맥만을 주로 사용하는 일반 사용자들은 JVM을 별도로 설치해야 하는 번거로움이 있기 때문에 별 의미가 없을 수 있다. 하지만 개발자 입장에서는 이것은 커다란 장점이다. 자바로 한 번 작성해 놓은 코드는 OS와 피지컬 머신에 상관없이 어디에서나 동일하게 수행되기 때문이다.


 이런 동작 방식의 단점은 JVM이라는 단계를 하나 더 거치기 때문에 성능은 일반적인 프로그램(예를 들어서 컴파일된 C/C++ 프로그램)에 비해서 떨어진다는 점이다. 컴파일된 자바 프로그램은 JVM에서 수행되는 바이트 코드(byte code)로 구성되고 이것을 JVM이 하나씩 해석하여 수행하는 방식으로 동작하기 때문이다. 하지만 요즈음에는 JVM 자체의 성능도 상당히 향상되어 네이티브 프로그램의 수행 속도와 거의 동등한 결과를 보여주고 있다. 이는 바이트 코드를 수행하기 전에 컴파일하는 JIT (just-in-time) 컴파일링과 자바 바이트 코드를 피지컬 머신에 최적화된 네이티브 기계어 코드로 변환하는 핫스팟(hotspot) 기능이 JVM에 도입되었기 때문이다.



Posted by 살레시오
,