럿고의 개발 노트
JVM, JDK, JRE 본문
JVM, JDK, JRE
JVM(Java Virtual Machine)
가상기계(Virtual Machine)란, S/W로 구현된 H/W를 뜻하는 넓은 의미의 용어로 예를 들어 TV와 비디오를 S/W화 한 윈도우 미디어 플레이어나 오디오 시스템을 S/W화 한 윈엠프 등이 포함된다.
가상컴퓨터(Virtual Computer)란, 실제 컴퓨터(H/W)가 아닌 S/W로 구현된 컴퓨터라는 의미다.
자바로 작성된 애플리케이션은 모두 JVM에서만 실행되기 때문에 자바 애플리케이션을 실행하기 위해서는 JVM이 반드시 필요하다.
스택기반의 가상머신.
일반프로그램 vs Java 프로그램
위의 사진과 같이 일반 프로그램은 OS만 거치고 하드웨어로 전달되는데, 자바 애플리케이션은 하드웨어에 맞게 컴파일된 상태가 아닌 실행 시 JVM을 통해 해석(interpret)되기 떄문에 한 단계가 더 존재하며, 속도가 느리다는 단점이 있다.
그러나 최근 바이트코드를 H/W 기계어로 바로 변환해주는 JIT(Just In Time)컴파일러와 향상된 최적화 기술(HotSpot)이 바로 적용되어서 속도의 격차가 많이 줄었다.
일반 애플리케이션은 OS에 종속적이지만, 자바 애플리케이션은 OS에 독립적인데 그것이 가능한 이유가 JVM이 OS에 맞게 해석해주기 때문이다. 따라서 JVM은 OS에 맞게 설치가 되어야 한다.(종속적) 따라서 JVM은 다양한 OS용이 존재한다.
또한 주요 OS뿐만 아니라 웹 브라우저, 스마트 폰, 가전기기 등에서도 JVM을 손쉽게 설치 할 수 있도록 지원
JVM은 다음과 같이 구성된다.
- 자바 인터프리터(interpreter) : 자바 컴파일러에 의해 자바 바이트 코드를 읽고 해석하는 역할
- 클래스 로더(class loader) : 자바는 동적으로 클래스를 읽어 오는데, 실행 중인 런타임에서야 모든 코드가 JVM과 연결되며 이렇게 동적으로 클래스를 로딩해주는 역할을 함.
- JIT(Just-In-Time Compiler) : 실행 중인 런타임에 실제 기계어로 변환해주는 컴파일러로 동적 번역(dynamic translation)이라고도 불리며 프로그램 실행 속도 향상을 위해 개발
즉, 자바 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는 데 사용 - 가비지 컬렉터(garbage collector) : 사용하지 않는 메모리를 자동 회수하여 개발자가 따로 메모리 관리를 하지 않도록 해줌.
- 실행 엔진(Execution Engine) : 클래스를 실행시키는 역할로 클래스 로더가 런타임에 바이트 코드를 배치시키면 실행엔진에 의해 실행됨.
JDK(Java Development Kit)
자바 개발 도구로 JRE + Java 바이트코드 컴파일러 + Java 디버거 등으로 구성된다.
IBM에서 자체적으로 변형한 IBM JDK와 오픈 소스 버전인 OpenJDK도 있다.
개발자들이 JVM과 JRE에 의해 실행되고 구동될 수 있는 자바 프로그램을 생성할 수 있게 해줌.
기술적 정의로는 컴파일러와 Java API를 포함하는 자바 플랫폼 사영서의 구현이며, 일반적으로는 개발자가 자바 기반 애플리케이션 개발을 위해 다운로드하는 소프트웨어 패키지다.
JRE(Java Runtime Kit)
자바 실행 도구로 JVM + Java API로 구성
주로 다른 구성 요소의 컨테이너이며 각 구성 요소의 활동을 조율하는 역할을 함.
자바 코드를 받아서 필요한 라이브러리와 결합한 다음 이 코드를 실행할 JVM을 시작하는 온디스크 시스템
애플리케이션 모니터링은 JVM의 기능이지만, JRE는 모니터링에 필요한 기준인 구성 옵션을 제공
출처
'Java Note' 카테고리의 다른 글
Java API (0) | 2020.01.30 |
---|---|
자바 속도 해결 방안(JIT 컴파일러, HotSpot) (0) | 2020.01.26 |
자바(Java)란? (0) | 2020.01.23 |
템플릿 메소드 패턴(Template Method Pattern) (0) | 2019.12.26 |
Spring과 Spring Boot (0) | 2019.12.25 |