럿고의 개발 노트

JVM, JDK, JRE 본문

Java Note

JVM, JDK, JRE

KimSeYun 2020. 1. 25. 19:30

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 프로그램
    Java애플리케이션과 일반 애플리케이션의 비교

  • 위의 사진과 같이 일반 프로그램은 OS만 거치고 하드웨어로 전달되는데, 자바 애플리케이션은 하드웨어에 맞게 컴파일된 상태가 아닌 실행 시 JVM을 통해 해석(interpret)되기 떄문에 한 단계가 더 존재하며, 속도가 느리다는 단점이 있다.

  • 그러나 최근 바이트코드를 H/W 기계어로 바로 변환해주는 JIT(Just In Time)컴파일러와 향상된 최적화 기술(HotSpot)이 바로 적용되어서 속도의 격차가 많이 줄었다.

  • 일반 애플리케이션은 OS에 종속적이지만, 자바 애플리케이션은 OS에 독립적인데 그것이 가능한 이유가 JVM이 OS에 맞게 해석해주기 때문이다. 따라서 JVM은 OS에 맞게 설치가 되어야 한다.(종속적) 따라서 JVM은 다양한 OS용이 존재한다.

  • 또한 주요 OS뿐만 아니라 웹 브라우저, 스마트 폰, 가전기기 등에서도 JVM을 손쉽게 설치 할 수 있도록 지원

  • JVM은 다음과 같이 구성된다.

    1. 자바 인터프리터(interpreter) : 자바 컴파일러에 의해 자바 바이트 코드를 읽고 해석하는 역할
    2. 클래스 로더(class loader) : 자바는 동적으로 클래스를 읽어 오는데, 실행 중인 런타임에서야 모든 코드가 JVM과 연결되며 이렇게 동적으로 클래스를 로딩해주는 역할을 함.
    3. JIT(Just-In-Time Compiler) : 실행 중인 런타임에 실제 기계어로 변환해주는 컴파일러로 동적 번역(dynamic translation)이라고도 불리며 프로그램 실행 속도 향상을 위해 개발
      즉, 자바 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는 데 사용
    4. 가비지 컬렉터(garbage collector) : 사용하지 않는 메모리를 자동 회수하여 개발자가 따로 메모리 관리를 하지 않도록 해줌.
    5. 실행 엔진(Execution Engine) : 클래스를 실행시키는 역할로 클래스 로더가 런타임에 바이트 코드를 배치시키면 실행엔진에 의해 실행됨.

JDK(Java Development Kit)

JDK 이미지

  • 자바 개발 도구로 JRE + Java 바이트코드 컴파일러 + Java 디버거 등으로 구성된다.

  • IBM에서 자체적으로 변형한 IBM JDK와 오픈 소스 버전인 OpenJDK도 있다.

  • 개발자들이 JVM과 JRE에 의해 실행되고 구동될 수 있는 자바 프로그램을 생성할 수 있게 해줌.

  • 기술적 정의로는 컴파일러와 Java API를 포함하는 자바 플랫폼 사영서의 구현이며, 일반적으로는 개발자가 자바 기반 애플리케이션 개발을 위해 다운로드하는 소프트웨어 패키지다.

    JRE(Java Runtime Kit)

JRE 이미지

  • 자바 실행 도구로 JVM + Java API로 구성

  • 주로 다른 구성 요소의 컨테이너이며 각 구성 요소의 활동을 조율하는 역할을 함.

  • 자바 코드를 받아서 필요한 라이브러리와 결합한 다음 이 코드를 실행할 JVM을 시작하는 온디스크 시스템

  • 애플리케이션 모니터링은 JVM의 기능이지만, JRE는 모니터링에 필요한 기준인 구성 옵션을 제공

출처

자바의 정석 3rd Edition

TCP School Java Part

#자바가상머신, JVM(Java Virtual Machine)이란 무엇인가?

"JRE란 무엇인가", 자바 런타임 환경의 이해

"JDK란 무엇인가", 자바 개발 키트 소개와 설치하기

'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
Comments