JDK(Java Developer Kit)는 JRE와 JVM, 표준 라이브러리,자바 컴파일러(javac), jar 등등 자바를 개발하는데 필요한 개발 도구들을 포함하고 있는 "소프트웨어 패키지"이다.
JRE(Java Runtime Environment)는 JVM과 java 표준 라이브러리를 가지고 있는데, 컴퓨터가 읽을 수 있게 컴파일하여JB(java bytecode)를 만들어준다.또한 JVM이 동작하기위해 필요한 라이브러리를 가지고 있다.
JVM(Java Virtual Machine)은 실제로 JB(java byte code)를 인터프리터하여 컴퓨터가 동작할 수 있게 해준다.
java를 실행하기 위해선 JVM이 필요하고 JVM을 실행하기 위해선 JRE가 필요하다. 또 JDK에 있는 apt(annotation tool), aplletviewer, javac, jar,jab등등을 이용하여 프로그램을 편하게 개발 할 수 있다.


java 소스 코드(.java파일)가 JAVA complier에 의해 컴파일된 java byte code(.class 파일)를 생성한다.
그다음java byte code(.class 파일)을 RunTime으로 가져가는 시점에 JRE의 일부 기능인 Class Loader가 동작하여 생성된 java byte code를 JVM에 동적 로드를 한다.
*동적로드:Class Loader가 파일을 읽으면서 필요한 시점에 동적으로 Load한다.(Class가 프로그램에 의해 호출될떄 까지 Load하지 않는다는 것)
Load된 java byte code를 JVM이 complie하여 프로그램이 실행된다.
Java는 컴파일을 2번하기떄문에 이를 보완하기위해 JLT 컴파일러가 되입되었는데, 프로그램을 실제로 실행할때 java byte code를 기계어로 컴파일한다.
JLT 추가 내용(출처): https://hyeinisfree.tistory.com/26
Class Loader 추가내용(출처): https://wonit.tistory.com/590