목표
: 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
학습할 것
타 언어는 운영체제에 종속적(플랫폼 종속적)이라 아무데서나 실행이 불가하지만 java는 JVM만 있으면 어디서든 실행 가능
바이트코드란 무엇인가
: 자바 컴파일러가 자바 소스 프로그램을 컴파일 한 기계어
: 플랫폼에 대한 종속성 없이 JVM에서 실행되는 바이너리 코드다. (2진수로 되어있음)
JIT 컴파일러란 무엇이며 어떻게 동작하는지
: JIT(just-in-time compilation)
: JVM , .NET, node.js 등 에서 컴파일 하는 방식
: interpreter 방식의 단점을 보완하기 위해 도입된 방식
: JIT 컴파일러는 바이트코드를 읽어 빠른 속도로 기계어를 생성할 수 있다.
이런 기계어 변환은 코드가 실행되는 과정에 실시간으로 일어나며(그래서 Just-In-Time이다), 전체 코드의 필요한 부분만 변환한다. 기계어로 변환된 코드는 캐시에 저장되기 때문에 재사용시 컴파일을 다시 할 필요가 없다.
: 딱 한번만 실행될 경우에는 인터프리터 방식이 더 나음
JVM 구성 요소
1. Class Loader : 컴파일 한 .class 파일을 런타임에 올려서 실행하는 부분
Execution Engine : .class 파일을 해석한다 (인터프리터, JIT 방식으로)
Runtime Data Area : 해석된 프로그램은 여기서 돌아간다. JVM 메모리 영역. 필요에 따라 GC나 쓰레드 동기화등 관리해줌
JDK와 JRE의 차이
: JDK (Java Development Kit)
: JRE (Java Run-time Environment)
: JDK가 더 큰 개념
JDK는 자바컴파일러 등 자바 응용 프로그램을 개발하는데 필요한 도구
+자바 응용프로그램이 실행될때 필요한 JVM,