목표
자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
-JVM이란 무엇인가?
JVM은 “Java Virtual Machine”을 줄인 것으로 직영하면 자바를 실행하기 위한 가상 기계 라고 할수 있다.
실제 컴퓨터(하드웨어)가 아닌 소프트웨어로 구현된 컴퓨터라는 뜻으로 컴퓨터 속의 컴퓨터라고 생각하면 된다.
자바로 작성된 애플리케이션은 모두 이 가상 컴퓨터(JVM)에서만 실행되기 때문에,
자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다.
Java 애플리케이션은 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경없이 실행이 가능한 것이다.단, JVM은 OS에 종속적이기 때문에 해당 OS에서 실행가능한 JVM이 필요하다.
자바의중요한 장점 중의 하나인 “Write once, run anywhere.”(한 번 작성하면 어디서든 실행된다.)
-컴파일 및 실행 방법

컴파일과 JVM의 동작원리
컴파일이란 사람이 이해하기 쉬운 언어인 고급언어로 개발한 프로그램을 컴퓨터가 이애하기 쉬운 언어인 기계어로 변환해주는 것을 말한다.
개발자가 작성한 코드(.java)를 컴파일러가 기계어인 자바 바이트 코드(.class)로 변환시켜주고,변환된 코드를 인터프리터가 한줄씩 실행시키면서 애플리케이션을 실행한다.
자바 바이트 코드(.class)는 클래스 로더에 의해 JVM내로 로드 되고,실행엔진에 의해 기계어로 해석되어 메모리상(Runtime Data Area)에 배치하게 된다.실행엔진에는 interpreter와 JIT(just-in-time) 컴파일러가 있다.
interpreter:한 행씩 분석하여 알맞은 기계어를 생성한 뒤 기계에 보낸다.
특징으로는 실행속도가 느리지만 코드 변경시 즉시 실행이 가능하여 테스트에 용이하다.
JIT(just-in-time):인터프리터의 단점인 실행속도가 느리다는 점을 보완한 것이 JIT 컴파일러이다.
사용 여부는 사용자가 직접 선택을 할 수있다.다만 JIT 컴파일러가 언제나 응용 프로그램의 성능을 향상시켜주는 것은 아니기때문에 작성한 코드를 잘 분석해보고 JIT 컴파일러의 필요 여부에 따라 적절히 사용하는 것이 좋다.
-바이트코드란 무엇인가(나무위키)
바이트 코드는 고급 언어로 작성된 소스 코드를 가상 머신이 이해할 수 있는 중간 코드로 컴파일한 것을 말한다.
가상머신은 이 바이트코드를 각각의 하드웨어 아키텍처에 맞는 기계어로 다시 컴파일한다.
바이트 코드는 가상머신이 있는 곳이라면 대체로 함께 존재한다고 보면 된다.가상머신이 텍스트를 로드하지 않으니 기계어와 같이 효율적으로 저장하고 불러올 수 있는 형식이 필요하기 때문이다.
더불어 바이트 코드는 인터프리터 방식으로 해석한다.즉 바이트 코드를 생성하는 것까지가 컴파일이고,바이트코드 자체는 인터프리터 언어라는 것이다.
-JDK와 JRE의 차이

JRE와 JDK의 차이점
Java Development Kit
먼저 JDK는 자바 환경에서 돌아가는 프로그램을 개발하는 데 필요한 툴들을 모아놓은 소프트웨어 패키지이다.
JRE(Java Runtime Environment)와 java 바이트코드 컴파일러,java 디버거 등을 포함하는 개발 도구들로 이루어져 있다.
즉, JDK = JRE+@라고 생각하면 된다.
-JRE(Java Runtime Environment)
JRE는 자바 실행환경의 약자이다.JRE는 JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다.
JRE는 JVM의 실행환경을 구현했다고 할 수 있고 자바 프로그램을 실행시키기 위해선 JRE를 반드시 설치해야한다.
자바 프로그래밍 도구는 포함되어있지 않기 때문에 자바 프로그래밍을 하기 위해선 JDK가 필요하다.