Write Once, Run Anywhere
JAVA 이전 C/C++은 플랫폼에 종속되어있기 때문에 윈도우에서 작성한 코드는 맥에서는 작동할수 없었고, 이를 해결하기 위해서는 Cross Compile이라는 방법을 통해서 다른 플랫폼에서 동작하는 코드를 작성해야 했다. 하지만 JAVA는 이 플랫폼 종속성을 해결하기 위해 JVM(Java Virtual Machine)을 도입하여 어떤 플랫폼에서도 JVM만 설치가 되어 있으면 자바 프로그램이 동작할 수 있도록 구현하였다.
기본적으로 프로그램은 아래와 같은 구조로 운영체제 위에서 실행이 되기 때문에 하드웨어나 운영체제에 종속적일 수 밖에 없다.
하지만 JAVA는 운영체제와 프로그램 사이에 JVM이라는 가상머신을 두어 플랫폼 종속성을 해소하였다.
즉, JVM은 운영체제와 프로그램을 indirect하게 연결해 주기 때문에 프로그램이 플랫폼으로부터 자유로워질 수 있도록 도와주었다.
java로 작성된 소스코드(.java)는 컴파일러(javac)에 의해 JVM이 이해할 수 있는 클래스파일(.class)로 번역되고 JVM에 의해 실행된다.
자바 클래스파일은 JVM이 이해할 수 있는 명령어의 집합인 Byte Code로 작성되어 있으며 각 클래스마다 하나씩 생성되어 그 클래스에 대한 정보를 가지고 있다.
JVM은 프로그램을 실행하면서 이 클래스파일을 불러와 Byte Code를 읽고, 그에 맞는 작업을 수행한다.