- 자바, jvm, jre, jdk

- JVM
- 자바가상머신이다. 자바 파일을 컴파일하면 자바 바이트 코드(.class 파일)가 생성되는데 이 바이트 코드를 'OS에 특화된 코드(기계어)로 변환하여'실행해준다.
- 이때 기계어로 변환할때는 인터프리터나 JIT컴파일러를 통해 변환된다고 알고 있다. 둘다 사용하는지 둘중 하나를 사용하는지 명확치않다.
- 이렇게 각 OS마다 기계어 변환이 달라지기에 특정 OS에 의존적이다 =종속적이다.
- 바이트 코드를 실행하는 표준이자 구현체(특정벤더 -> 오라클,아마존 등등)다.
- JRE : JVM + 라이브러리
- JRE의 목적은 자바 어플리케이션을 실행할 수 있도록 구성된 배포판이라고 한다.
- JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다. -> 이부분은 보완필요
- 개발관련 도구는 포함하지 않는다(JDK에 있다). 그래서 JRE만 가지고는 자바 파일을 컴파일할수 없다.
- JDK
- JRE + 개발에 필요한 툴이다.
- 소스 코드를 작성할때 사용하는 자바 언어는 플랫폼에 독립적.
- 오라클인 자바 11부터 JRE는 따로 제공하지 않고 JDK만 제공한다.
- 자바
- 명확하게 구분해야 하는 부분이 자바는 우리가 사용하는 '프로그래밍 언어'를 자바라고 한다. (물론 개인마다 의견은 달라질수 있다.)
- JDK에 들어있는 자바 컴파일러(javac)를 사용하여 바이트코드로 컴파일 할 수 있다. -> 이 말은 결국 자바와 JDK를 독립적으로 놓고 보는 것이다.
- 그래서 해당 강의 초반 햇갈렸던 부분이 자바는 원래 독립적이라고 알고 있는데 JVM은 플랫폼에 의존적이다..? 뭐지..? 했는데 자바와 JDK를 구분함으로서 이해가 되었다