WORA를 가능하게 하는 자바 가상 기계
WORA(Write Once Run Anywhere) : 한번 코드를 작성에 모든 폴랫폼에서 바로 실행하는것
JVM 자체는 플랫폼에 종속적이다
JVM이 클래스 파일의 바이트 코드를 실행해 자바 앱이 실행된다
컴파일을 통해 .java 파일에서 .class를 생성한다
컴파일 : 소스 파일을 컴퓨터가 이해할 수 있는 언어로 만드는 과정
C언어 : .c --> .obj (기계어)
자바 : .java --> .class (바이트 코드)
.java 컴파일하기
$ javac test.java
$ javac test.java
$ java test
.java를 컴파일해 생성된 .class 파일이 바이트 코드이다
바이트 코드 : JVM에서 실행 가능한 바이너리 코드
기계어와 달리 CPU에 직접 실행 X
JVM이 인터프리터 방식으로 바이트 코드를 해석
자바 소스 파일에 여러 클래스를 작성할 수 있고 컴파일시 클래스 마다 각각 클래스 파일이 생성된다
바이트코드를 런타임에 기계어로 변환해주는 컴파일러
자바 인터프리터로만 실행한다면 프로그램 실행을 느리게 한다
이를 개선하기 위해 JIT 컴파일러를 사용한다
자바 JIT 컴파일러가 하는 일
바이트 코드를 파일, 메소드, 코드 일부 단위 등 여러 색션으로 읽어들인다
실행될때 코드를 컴파일한다. 자주 실행되는 코드는 캐싱되 이후 컴파일 없이 쓸 수 있다
스택에서 레지스터 연산으로 변환, 레지스터 할당으로 메모리 접근 줄이기 등 다양한 코드 최적화를 적용한다