자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
JVM(Java Virtual Machine) : ‘자바를 실행하기 위한 가상 컴퓨터’ 을 뜻하는 말로 바이트코드를 실행하는 주체
- Java로 작성된 application은 모두 JVM에서만 실행된다.
- OS와 바로 맞붙어 OS에 종속적으로 실행되는 다른 application과 다르게 JAVA의 경우 JVM을 사용해 운영체제의 독립적으로 실행이 가능하다. → 'Write Once, Run Anywhere'
- but, JVM은 OS에 종속적이다 → 윈도우, 리눅스..등 에 맞는 JVM존재
- 다른 application의 코드와 달리 JVM을 추가로 거치기 때문에 실행 시 해석(interpret) 된다 → 속도 느림
컴파일을 한다는 것은 .java 파일을 .class 파일(바이트코드)을 만든다는 것을 의미 한다.
- javac.exe : 자바 컴파일러, JDK (Java Development Kit) 자바 개발 도구를 설치하면 bin 폴더 안에 javac 라는 java compiler 가 포함되어 있다. → 이 명령을 사용해서 .class 파일을 만든다.
컴파일하여 얻어낸 클래스파일(.class)을 인터프리터로 실행한다.
- java.exe : 자바 인터프리터, 컴파일러가 생성한 바이트코드를 해석하고 실행한다.
바이트코드 : 컴파일된 자바코드
- 프로그래밍 언어 → 사람이 이해하는 언어이기 때문에 컴퓨터가 이해할 수 있는 언어로 만들어줘야 됨
- 이러한 역할을 JVM이 담당함 → JVM이 이해할 수 있는 형태가 바이트코드
- javac 명령을 통해 컴파일 → .class 확장자 갖는 바이트 코드 만들어지고 JVM이 실행
JIT 컴파일러(Just-in-time compilation) : 바이트코드를 하드웨어의 기계어로 번역
- 인터프리터 방식 - 바이트 코드 한줄씩 번역 → 중복 번역 = 비효율
- 이를 방지해서 보다 좋은 성능을 낼 수 있게 하기 위해 JIT 컴파일러는 번역한 내용을 캐싱해 두었다가 동일한 메소드를 실행할 경우 다시 번역하지 않고 캐싱된 내용을 실행
- JIT 컴파일러를 통해 Java의 대표적인 단점인 속도문제가 상당히 개선되었다.
JVM은 크게 네가지 구성 요소를 가진다.
Class Loader
GC (Garbage Collector)
Execution Engine
Runtime Data Area
JDK(Java Development Kit) : 자바개발도구
- JDK = JRE + 개발에 필요한 실행파일(javac.exe 등)
- Java로 프로그램 개발을 하기 위한 모든 파일을 포함한 kit를 의미한다.
JRE(Java Runtime Environment) : 자바로 작성된 응용프로그램이 실행되기 위한 최소환경
- JRE = JVM + 클래스라이브러리(Java API)