C나 C++과 같은 다른 언어들은 운영체제에 의존적이기 때문에 윈도우에서 만든 실행파일은 리눅스나 맥에서 실행이 불가능하다. 따라서 운영체제별로 컴파일을 따로 해서, 실행파일을 따로 만들어야하는 번거로움이 있었다.
반면 자바는 플랫폼(운영체제)의 영향을 받지 않는다. 자바는 한번 컴파일을 하면 .class라는 파일이 만들어지는데 이 파일을 바이트 코드
라고 하고, 바이트 코드를 JVM이 운영체제에 맞는 실행파일로 바꿔준다. 컴파일 했을 때 바로 실행파일이 만들어지는 것이 아니라, 중간단계의 코드로 변환이 되고, 이 코드가 다시 JVM상에서 실행되어 운영체제별 실행파일이 만들어진다.
정리하자면 JDK는 JRE를 포함하고 있고, JRE는 JVM을 포함하고 있다.
JDK
는 자바로 개발을 할 때 필요한 도구들의 모음이고,
JRE
는 자바 파일을 실행할 떄 필요한 도구들의 모음이고,
JVM
은 바이트코드를 실행해주는 가상머신이다.