컴퓨터 운영체제 위에서 실행되면서 자바를 위한 부가적인 서비스를 제공하는 소프트웨어 계층이다.
추상화의 전형적인 사례로 기반 운영체제를 자바 어플리케이션 실행을 위한 일관적인 플랫폼으로 추상화 한다.
JRE 에는 자바 실행에 필요한 라이브러리와 소프트웨어가 포함된다.
(ex : 클래스 로더 )
JRE 는 자바 코드를 받아 필요한 라이브러리와 결합한 다음 해당 코드를 실행할 JVM 을 시작하는 역할. 즉 온디스크 시스템이라고 볼 수 있다.
https://docs.oracle.com/en/java/javase/11/tools/javac.html#GUID-AEEC9F07-CB49-4E96-8BC7-BCC2C7F725C9
파일 위치 이동 후
>>> javac 파일명.java
컴파일 결과로 바이트코드(파일명.class)가 생성
자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 바이트 코드라고 불린다.
https://docs.oracle.com/en/java/javase/11/tools/java.html#GUID-3B1CE181-CD30-4178-9602-230B800D4FAE
>>> java 파일명
class, jar 파일 등이 실행 가능 (사용법 문서 참고)
class 파일의 확장자는 붙이지 않는다.
java 명령은 JRE 를 시작하고 지정된 클래스를 로드하고 해당 클래스의
main()
메서드를 호출하여 이를 수행합니다.
Java Virtual Machine
자바(변환된 .class 파일)를 실행하기 위한 가상머신
자바 언어로 작성된 어플리케이션은 모두 JVM 에서만 실행
실행을 위해선 JVM 이 반드시 필요하다.
자바 바이트코드는 플랫폼에 독립적이며 모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 바이트코드를 실행한다. 따라서 표준 자바 API까지 동일한 동작을 하도록 구현한 상태에서는 이론적으로 모든 자바 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.
JVM 의 주요 목적
Java 어플리케이션은 JVM 하고만 상호작용을 하기 떄문에 OS 와 하드웨어에 독립적이다.
주의 : JVM 이 어플리케이션과 OS 사이에서 상호작용해주기에 Java 가 OS 에 독립적인것이다. JVM 은 OS 에 종속적이다.(JVM 은 OS 에 독립적이지 못하다.)
JVM 은 JRE 에 포함되어있다. 따라서 JRE 가 설치되어있다면 JVM 역시 설치되어있는것이다.
Class Loader 는 JRE 에 속하나 JVM 동작상 필요하므로 함께 설명
https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html