|
많은 친구들이 저처럼 오랫동안 JAVA를 사용해왔을 수도 있지만, JDK, JRE, JVM의 연결고리와 차이점은 항상 모호했습니다. 오늘은 이 세 가지의 관계를 정리하기 위해 이 글을 쓰려고 합니다.
JDK : 자바 개발 툴킷. JDK는 Java Runtime 환경, 여러 Java 도구(javac/java/jdb 등), Java 기반 라이브러리(예: Java API에 rt.jar 포함)를 포함한 전체 JAVA의 핵심입니다. 가장 주류인 JDK는 Sun이 출시한 JDK입니다. Sun 외에도 외국 IBM 회사들이 자체 JDK를 개발한 기업과 조직이 많습니다. 예를 들어 외국 IBM 회사들이 자체 JDK를 개발했고, 국내 타오바오도 자체 JDK를 개발했으며, 여러 조직이 자체 JDK를 개발하여 일부 측면에서 개선하고 자체 요구에 맞게 조정했습니다. 예를 들어 IBM의 JDK는 SUN의 JDK보다 훨씬 효율적이라고 알려져 있습니다. 하지만 어쨌든 기본 선 JDK를 먼저 익혀야 합니다. JDK에는 세 가지 버전이 있습니다: J2SE, 표준판, 표준판은 주로 J2EE, 엔터프라이즈 에디션을 사용하는 버전으로, 이 JDK를 사용해 J2EE 애플리케이션을 개발합니다. J2ME, 마이크로 에디션은 주로 모바일 기기, 임베디드 기기의 자바 애플리케이션에 사용됩니다
우리는 종종 JDK를 Java API를 지칭합니다. Java API는 Java 애플리케이션 프로그래밍 인터페이스입니다. 사실 우리는 선배들이 작성한 일부 자바 클래스들, 중요한 언어 구조, 기본 그래픽, 네트워크 및 파일 I/O 등을 포함합니다. 우리는 이 클래스들을 우리 프로그램에서 선배들이 작성한 것들이라고 부르며, 자체 개발의 기반이 됩니다. 물론, 더 나은 성능이나 더 강력한 기능을 가진 서드파티 라이브러리가 점점 더 많이 나오고 있습니다.
JRE: Java 런타임 환경. 즉, 모든 Java 프로그램은 실행을 위해 JRE 아래에 있어야 합니다. JVM 및 JAVA 핵심 라이브러리와 지원 파일을 포함합니다. JDK와 비교할 때, JDK는 컴파일러, 디버거 등 개발 도구가 포함되어 있지 않습니다.
JVM: Java 가상 메시널(JAVA 가상 머신). JVM은 JRE의 일부로, JRE는 실제 컴퓨터에서 다양한 컴퓨터 기능을 시뮬레이션하여 구현된 가상의 컴퓨터입니다. JVM은 프로세서, 스택, 레지스터 등과 같은 자체 하드웨어 아키텍처를 가지고 있으며, 이에 대응하는 명령어 시스템도 갖추고 있습니다. JVM의 주요 임무는 자체 명령어 집합(즉, 바이트코드)을 해석하여 로컬 CPU의 명령어 집합이나 운영체제의 시스템 호출에 매핑하는 것입니다. Java 언어는 크로스 플랫폼으로 실행되며, 실제로는 다른 운영 체제로, 운영 체제와 독립적이고 완전한 크로스 플랫폼 JVM 매핑 규칙을 사용합니다. JVM은 상위 수준의 Java 소스 파일에는 관심이 없고, 소스 파일에서 생성된 클래스 파일만 신경 씁니다. 클래스 파일은 JVM 명령어 집합, 심볼 테이블, 그리고 일부 보조 정보로 구성됩니다. 다음 그림은 JDK, JRE, JVM 간의 관계를 잘 보여줍니다:
실제 개발 상황은 JDK(JAVA API 호출)를 사용해 자체 JAVA 프로그램을 개발한 후, JDK의 컴파일러(javac)를 통해 텍스트 java 파일을 JAVA 바이트코드로 컴파일하고, 이 JAVA 바이트코드를 JRE에서 실행하며, JVM이 이 바이트코드를 파싱하여 CPU 명령어 집합이나 OS의 시스템 호출에 매핑하는 것입니다.
|