자바는 하드웨어를 기반으로 운영체제가 동작하고,
운영체제는 자바 가상머신(Java Virtual Machine, JVM)을 실행시키고,
자바 가상머신이 자바 프로그램을 실행시키는 구조로 동작한다.

이렇게 자바 가상머신에 의해 실행되는 구조로 설계된 이유는 뭘까?
자바 프로그램을 운영체제에 상관없이 실행시키기 위해서다.
프로그램은 운영체제에 따라 구현 방법이 달라지기 때문에 동일한 기능의 프로그램이라도 윈도우와 리눅스에서 동작을 시키려면 두개의 프로그램을 작성해야만 한다.
하지만 자바 프로그램은 자바 가상머신이 중간에서 운영체제별로 존재하는 차이점을 해결하기 때문에 코드 수정없이 다양한 운영체제에서 실행시킬 수 있다.
이때 각 운영체제별로 프로그램을 실행시키는 가상머신이 다르므로,
운영체제에 따른 적절한 가상머신의 설치만 신경써주면 된다 !
(javac.exe)자바 소스코드가 담긴 소스파일은 우리가 알아들을 수 있는 파일이다.
때문에 자바 컴파일러를 이용하여 소스파일에 있는 소스코드를 자바 가상머신이 이해할 수 있는 코드로 바꿔준다.
자바 가상머신이 이해할 수 있는 코드로 바꿔주는 과정을 컴파일 과정이라 한다.
컴파일 과정이 끝나면 클래스 파일이 생성된다.
( 소스 파일의 확장자는 .java이며, 클래스 파일의 확장자는 .class이다 )
이 클래스 파일에는 자바 가상머신이 알아들을 수 있는 코드로 채워져 있으며, 이러한 코드를 바이트코드라 한다.
(java.exe)자바 런처는 자바 가상머신(JVM)이 실행되고, 그 위에 자바 프로그램을 구동시키는 역할을 한다.
자바 런처는 클래스 파일을 대상으로 구동을 시작한다.
🔎 참고