반응형
JDK 구조
자바 가상 머신(JVM, Java Virtual Machine)
- 바이트 코드를 어떻게 실행하는지에 대한 표준이자 구현체를 의미한다.
- JVM 자체는 표준이고 이는 특정 벤더(오라클, 아마존, Azul 등)들이 구현하기 때문에 구현체는 다양하다.
- 자바 바이트 코드 .class 파일을 OS(Linux, Window ...)에 특화된 코드로 변환하여 실행한다.
- 바이트 코드를 기계어(Machine Code)로 변환할 때는 인터프리터와 JIT 컴파일러가 사용된다. 각 OS에 맞는 기계어로 변환이 되어야 해당 OS에서 실행할 수 있다.
- Linux에서 바이트코드를 기계어로 변환한 것을 Window에서 사용할 수는 없다.
- 자바 바이트 코드 형태는 다음과 같다.
- 바이트 코드를 기계어(Machine Code)로 변환할 때는 인터프리터와 JIT 컴파일러가 사용된다. 각 OS에 맞는 기계어로 변환이 되어야 해당 OS에서 실행할 수 있다.
- JAVA는 플랫폼에 종속적이지 않지만 JVM 자체는 특정 플랫폼에 종속적이다.
- 클래스 로딩, 메모리 관리 등의 여러가지 일들을 처리한다.
자바 런타임 환경(JRE, Java Runtime Environment)
- 자바 애플리케이션을 실행할 수 있도록 구성된 배포판이다.
- JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다.
- 개발 관련 도구는 포함하지 않는다.
- javac(자바 컴파일러)와 같은 것이 포함되지 않아 컴파일이 불가능하다.
자바 개발 키트(JDK, Java Development Kit)
- JRE + 개발에 필요할 툴
- 소스 코드를 작성할 때 사용하는 자바 언어는 플랫폼에 독립적.
- 오라클은 자바 11부터는 JDK만 제공하며 JRE를 따로 제공하지 않는다.
- 자바9 부터 모듈 시스템이 들어와서 jlink를 사용하여 JRE 비슷하게 만들 수 있다. (링크)
- JVM의 존재 덕분에 한 번 작성하여 모든 위치에서 실행(Write Once Run Anywhere)이 가능하다.
JVM 사용 언어?
- 최초의 JVM은 자바만을 지원하기 위해 만들어 졌지만 중간 코드인 .class 을 만들어주거나 .java 파일을 만들어 주면 실행가능하기 때문에 이러한 특성을 이용하여 다른 프로그래밍 언어로 작성했다고 하더라도 JVM을 활용할 수 있다.
- JVM 기반으로 동작하는 프로그래밍 언어는 다음과 같다.
- 클로저, 그루비, JRuby, Jython, Kotlin, Scala 등
[참고자료]
반응형
'Java > 기본' 카테고리의 다른 글
자바(Java) - 클래스 로더 시스템 구조 이해하기 (0) | 2021.05.25 |
---|---|
자바(Java) - JVM 구조 이해하기 (0) | 2021.05.24 |
자바(Java) - try-with-resources 구문 (0) | 2020.03.01 |
자바(Java) - 예외처리 (0) | 2020.03.01 |
자바(Java) - 추상 클래스 (0) | 2020.02.29 |