클래스 파일은 byte code로 되어있는 실행가능한 파일이지만 그냥 더블클릭해서 실행할수 없다 왜? 실행하기 전단계의 파일이기 때문이다. 그래서 이걸 실행해주는 별도의 실행 엔진이 필요하다. 그것이 JVM. JVM에 의해서 클래스파일이 메모리에 로딩 되고, 메모리를 로딩함과 동시에 운영체제에 맞게 리소스들을 재컴파일해서 실행한다.
콘솔에서 자바파일을 컴파일할때 javac를 사용하는데, 이같은 명령어의 집합을 TOOL이라한다. 그리고 java로 클래스파일을 실행할때, 실행은 실제로 JVM가 하게 된다.
실행되는 과정은 운영체제에 따라 다음과 같다.
JVM은 평소에 메모리에 로딩되어 놀고있다가 실행명령어가 JVM을 호출한다. 그러면서 원하는 1차 컴파일된 byte코드의 원하는 클래스파일을 읽어서 구동된 운영체제에 맞도록 내부적으로 메모리를 만들어서 재컴파일을한다.
자바는 왜? 이런 가상구동머신에서 실행되도록 했을까?
Java 프로그램은 OS에 독립적으로 실행될수 있도록 만들어졌다. 그러니까 자바실행파일이 특정 운영체제에 종속되도록 컴파일하면 안된다는 것이다. 그래서 자바를 컴파일하면 클래스파일 byte코드의 형태로 만들어진다. 그다음에 실행명령어가 왔을떄 JVM이 다시한번 운영체제에 맞게 실행하도록 재컴파일한다. 그래서 JVM만 있으면 어떤 운영체제에 상관없이 구동이 가능하다. 그래서 다른 언어에 비해서는 조금 느릴수있다.
note: 자바 실행환경이 구축되어 있지않은 사용자가 파일을 실행하려면 JRE 가 필요하다.