Programming/Java

JAVA :: 자바 컴파일러(Java Compiler)와 JVM(Java Virtual Machine)

WANJIN 2017. 5. 1. 11:03
반응형

자바 컴파일러(Java Compiler)

자바 소스 코드를 실행시키려면 먼저 기계가 잘 알아들을 수 있는 bytecode로 변환을 시켜야 한다.
변환하기 전의 원본 코드인 source code를, 기계에서 실행할 수 있도록 bytecode로 변환하는 일을 하는 프로그램이 바로 자바 컴파일러다.

* 요렇게 특정 프로그램에서 실행할 수 있도록 변환한 코드를 'target code'라고 부름. 특정 기계가 없으면 실행할 수가 없다.
    이 놈은 Native code를 실행하는 것에 비해 실행 속도가 느린 대신, OS 독립적이라서 어떤 OS에서라도 VM만 설치되어 있으면 실행할 수 있다.
  

JVM(Java Virtual Machine)

자바 컴파일러가 변환한 bytecode를 실행시키는 프로그램이다.
(bytecode는 p-code라고도 부름)

이 프로그램은 bytecode를 읽어서 OS의 코드를 호출하는 일을 한다.

실행되는 과정을 설명하면 이렇다.
1. JVM이 target code를 로딩한다.
2. 필요한 기능을 OS에게 호출하면,
3. OS가 HW를 제어함.

한마디로, 자바 컴파일러가 컴파일한 target code는 OS에게 바로 접근할 수 없다.
반드시 JVM을 거쳐야 한다.

JVM의 기능을 호출하는 target code를 JVM이 로딩하면,
JVM은 다시 OS의 기능을 호출하고,
다시 OS는 HW를 제어하는 것이다.

우리가 잘 알고 있는 OS 프로그램인 '메모장'과 비교해보면 이해가 빠르다.
메모장은 윈도우 운영체제의 native app이므로, native code로 되어 있다.
* native code는 특정 OS의 기능을 바로 호출하는 코드로 '기계어 코드'라고 부름.
이 프로그램은 곧장 OS기능을 호출하고, OS는 HW를 제어한다.
즉, JVM을 거칠 필요가 없다.

 

Target code(=bytecode)와 그것을 실행시켜주는 프로그램(VM)의 관계를 잘 이해하면 JVM에 대한 이해가 쉽다.
좋은 예로, Adobe Flash Player가 있다.

종종 어떤 웹 사이트에서 동영상을 보려고 하는데, 컴퓨터에 Flash Player가 설치되어 있지 않으면 동영상을 볼 수 없는 일을 경험해본 적이 있을 것이다.
해당 동영상은 Flash Player라는 실행 프로그램만 읽어들일 수 있는 targetcode로 되어 있기 때문에, Flash Player가 없이는 실행되지 않는 것임.


<코드 종류 별 특징 정리>

* source code(소스코드)
    : 원본 소스 코드. 인간이 작성한 바로 그것.

* byte code
    : 특정 프로그램이 이해하도록 소스코드가 변환된 형태의 코드. 가상 기계를 위한 코드라고도 부른다.
      해당 프로그램(VM)이 없이는 실행할 수 없는 대신, VM만 있으면 어느 OS에서도 실행시킬 수 있다.

* native code
     : 기계어 코드로 OS에 종속되는, 특정 OS에서만 실행할 수 있는 코드를 말한다.
       다른 OS에서 실행하려면 일부 코드를 다시 짜고나서 컴파일을 다시 해야 한다. 





반응형