직역하면 "자바를 실행하기 위한 가상 기계"라고 할 수 있다.
Java는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java를 실행 시킬 무언가가 필요하다. 그게 바로 "JVM" 이다
컴파일 과정
Java 소스 코드 , 즉 원시코드(*.java
) 는 CPU가 인식을 하지 못하는 기계어로 컴파일을 해줘야한다.
하지만 java는 JVM 이라는 훌륭한 머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 Java bytecode(*.class
)로 변환한다.
Java compiler가 .java
파일을 .class
라는 java bytecode로 변환 시켜준다.
Java compiler는 JDK를 설치하면 bin에 존재하는 javac.exe를 말함, (JDK에 java 컴파일러가 포함됐다는 뜻임)
javac 명령어를 통해.java
를.class
로 컴파일 가능.
변환된 bytecode는 기계어가 아니릭 때문에 OS에서는 바로 실행되지않아.
이 때, JVM이 OS가 bytecode를 이해할 수 있도록 해석해준다. 따라서 Byte Code는 JVM 위에서 OS 상관없이 실행될 수 있는 것이다.
OS에 종속적이지 않고, Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행할 수 있다.
아래는 Java Compiler에 의해 .java
파일을 .class
라는 Java bytecode로 만드는 과정이다.
Java Compiler는 JDK를 설치하면 javac.exe
라는 실행 파일 형태로 설치된다. 정확히는 JDK 의 bin
폴더에 javac.exe
로 존재한다.
Java Complier 의 javac
라는 명령어를 사용하면 .class
파일을 생성할 수 있다.
역시 원시인인 나에게 코드가 빠져서는 안된다.
copy typescriptpublic class test {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
"Hello World"를 출력하는 .java
파일을 생성하고 이를 .class
파일로 변환시켜보자.
copy bashC:\Users\owner>cd Desktop
Windows를 기준으로, cmd 창을 열고 해당 .java 파일이 있는 곳으로 이동한다.
copy makefileC:\Users\owner\Desktop>javac test.java
해당 위치에서 javac 명령어로 컴파일을 진행한다.
위와 같은 순서를 진행하면
위와 같은 test.class를 얻을 수 있다.
간단하게 JVM에서 돌아가는 실행 프로그램을 위한 이진 표현법임ㅇㅇ
자바 바이트 코드는 JVM이 이해할 수 있는 언어로 변환된 자바 소스코드를 의미해
자바 컴파일러에 의해 변환된 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리고 있어.