이 과정도 언어가 변하는 것이기 때문에 컴파일이라 할 수있다.
ex) python
-> java
실제 컴파일을 돌려주는 주체이다.
버튼을 누르면 실제 동작을 수행하는 것
컴파일러에게 변환된 인간이 알아볼 수 없는 0,1 코드
운영체제마다 바이트코드를 읽는게 다릅니다.
c언어 같은 경우 운영체제마다 각각 맞는 컴파일러가 필요합니다.
하지만 java
는 다릅니다.
운영체제 들어가기전 한 단계 더 거치게 설게되었습니다.
java
는 컴파일러 단에서 os에 맞춘 컴파일을 해주는것이 아닌
모든 os의 공동된 컴파일 과정
을 거친후 jvm
이 각 운영체제가 해석할 수 있는 양식으로 번역해줍니다.
사진에서 볼 수 있듯 각 os 별 jvm
이 따로 구성되어 있는것을 확인 할 수 있습니다.
따라서 windows jvm
, mac jvm
, linux jvm
을 거치며각 운영체제에 맞게 번역 및 실행 합니다.
지금까지 java를 실행시 jvm을 다운 받지 않았는데 어떻게 실행되지?
라고 의문점이 있을 수 있습니다.
jvm
은 따로 다운로드 받는것 이 아닌 java
(jdk) 를 다운받을때 같이 다운됩니다.
따라서 코드 실행시 바이트코드를 jvm이 알아서 mac, windows, linux에 맞게 돌릴 수 있어 저희는 os에 상관없이 컴파일 된 바이트 코드만 들고 다니면 os에 자유로워 질 수 있는 것입니다.
이런 편리함 때문에 jvm은 그루비, 스칼라, 코틀린에도 많이 사용됩니다.
정리
사람이 작성하는 코드 -> 컴파일 -> jvm -> 각 os에 맞게 해석된 바이트코드 작동이라고 할 수 있습니다.
컴파일을 진행하며 바이트코드
로 변환시키지만 jvm
은 한번 더 운영체제에 맞는 바이트코드
를 해석 하여 실행한다고 이해하면 편합니다.
jdk
를 설치하면 jre
, jvm
이 설치되는 구조입니다.
jvm
jre
jdk
jdk 버젼
각 버전별로 새로운 기능이 추가되거나 기존 기능이 사라진다
jdk 종류
기능 자체는 모두 동일하나 성능과 비용에 약간의 차이가 있을 수 있다.