JVM, JDK, JRE 및 OpenJDK의 차이점은 무엇입니까?


답변:


379

JVM

자바 가상 머신 (JVM)은 자바 바이트 코드를 실행하는 가상 머신입니다. JVM은 Java 소스 코드를 이해하지 못합니다. 그렇기 때문에 JVM에서 이해하는 바이트 코드를 포함하는 *.java파일을 얻으려면 *.class파일을 컴파일해야 합니다 . 또한 Java가 "이동 가능한 언어"( 한 번 작성하면 어디에서나 실행 ) 가 될 수있는 엔티티이기도합니다 . 실제로 다른 시스템 (Windows, Linux, macOS, Wikipedia 목록 참조) 에 대한 JVM의 특정 구현이 있습니다 . 목표는 동일한 바이트 코드를 사용하여 모두 동일한 결과를 제공하는 것입니다.

JDK 및 JRE

JDK와 JRE의 차이점을 설명하려면 Oracle 설명서 를 읽고 다이어그램을 참조하는 것이 가장 좋습니다 .

자바 런타임 환경 (JRE)

JRE (Java Runtime Environment)는 Java 프로그래밍 언어로 작성된 애플릿 및 응용 프로그램을 실행하기위한 라이브러리, Java Virtual Machine 및 기타 구성 요소를 제공합니다. 또한 두 가지 주요 배포 기술이 JRE의 일부입니다. Java Plug-in은 애플릿이 널리 사용되는 브라우저에서 실행되도록합니다. 네트워크를 통해 독립 실행 형 응용 프로그램을 배포하는 Java Web Start. 또한 엔터프라이즈 소프트웨어 개발 및 배포를위한 J2EE (Java 2 Platform, Enterprise Edition) 기술의 기반이기도합니다. JRE에는 애플릿 및 애플리케이션 개발을위한 컴파일러 또는 디버거와 같은 도구 및 유틸리티가 포함되어 있지 않습니다.

자바 개발 키트 (JDK)

JDK는 JRE의 상위 집합이며 JRE에있는 모든 항목과 애플릿 및 응용 프로그램 개발에 필요한 컴파일러 및 디버거와 같은 도구를 포함합니다.

Oracle만이 JDK를 제공하는 것은 아닙니다.

OpenJDK

OpenJDK JDK 의 오픈 소스 구현이며 Oracle JDK의 기반입니다. Oracle JDK와 OpenJDK 사이에는 거의 차이가 없습니다.

차이점은이 블로그에 설명되어 있습니다 .

Q : OpenJDK 저장소에있는 소스 코드와 Oracle JDK 빌드에 사용하는 코드의 차이점은 무엇입니까?

A : 매우 가깝습니다. Oracle JDK 릴리스의 빌드 프로세스는 Oracle의 Java 플러그인 및 Java WebStart 구현과 일부 폐쇄 된 소스 세 번째를 포함하는 배포 코드와 같은 몇 가지만 추가하여 OpenJDK 7을 기반으로 빌드됩니다. 그래픽 래스터 라이저와 같은 파티 구성 요소, Rhino와 같은 일부 오픈 소스 타사 구성 요소, 추가 문서 또는 타사 글꼴과 같은 몇 가지 비트와 조각. 앞으로 우리의 의도는 JRockit Mission Control (아직 Oracle JDK에서 사용할 수 없음)과 같은 상용 기능을 고려하는 것을 제외하고 Oracle JDK의 모든 부분을 오픈 소스하고, 더 가까운 패리티를 달성하기 위해 방해가되는 타사 구성 요소를 오픈 소스 대안으로 교체하는 것입니다. 코드베이스 사이.

JDK 11 업데이트-Donald Smith의 기사는 Oracle JDK와 Oracle의 OpenJDK 간의 차이점을 명확히하려고합니다. https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11- 그리고 나중에


@ alain.janinm, 개발을 위해 OracleJDK 또는 OpenJDK를 선택 하시겠습니까?
Pacerier

@Pacerier 나는 직장에서 OracleJDK를 사용하는 데 익숙하지만 OpenJDK에 대해 아무것도 가지고 있지 않습니다. 오픈 소스를 선호하고 독점 라이센스를 사용할 필요가 없다면 OpenJDK를 선택하십시오.
alain.janinm

1
제가 다음 사항에 대해 옳은지 알려주세요. 기본적으로 JRE 없이는 실제 Java 애플리케이션을 실행할 수 없습니다. 따라서 모든 다운로드 (개발자를위한 일부 이국적인 것을 제외하고)에는 JVM과 JRE가 모두 포함되어 있습니까 (슈퍼 셋 JDK가 아닌 경우)?
Mads Skjern

8
@MadsSkjern 예, Java 앱을 실행하려면 JRE가 필요합니다. 그러나 Java 앱을 다운로드 할 때 JRE와 함께 제공되지 않으며 컴퓨터에 하나가 설치되어있을 것으로 예상합니다.
alain.janinm 2015

92

JVM은 Java 가상 머신입니다. 실제로 Java ByteCode를 실행합니다.

JRE는 Java Runtime Environment입니다. 여기에는 무엇보다도 JVM이 포함되어 있으며 Java 프로그램을 실행하는 데 필요합니다.

JDK는 Java Development Kit입니다. JRE이지만 javac (Java 소스 코드를 컴파일하는 데 필요함) 및 기타 프로그래밍 도구가 추가되었습니다.

OpenJDK는 특정 JDK 구현입니다.


3
아마도 other thingsJVM에 포함 된 것을 언급하지 않았기 때문일 것 입니다. 그들은 무엇인가 ? -이 기사는 완전히 그 질문에 대답합니까 javabeat.net/what-is-the-difference-between-jrejvm-and-jdk
Erran Morad

OpenJDK에는 JVM 사양 구현 중 하나 인 JVM이 포함되어 있습니다. Oracle JDK에는 JVM 사양의 또 다른 구현이 포함되어 있습니다
Akh

47

JDK (자바 개발 키트)

Java Developer Kit에는 Java 프로그램을 개발하는 데 필요한 도구와 프로그램을 실행하기위한 JRE가 포함되어 있습니다. 도구에는 컴파일러 (javac.exe), Java 애플리케이션 실행기 (java.exe), Appletviewer 등이 포함됩니다.

컴파일러는 자바 코드를 바이트 코드로 변환합니다. Java 응용 프로그램 시작 관리자는 JRE를 열고 클래스를로드하고 기본 메서드를 호출합니다.

자체 프로그램을 작성하고 컴파일하려면 JDK가 필요합니다. Java 프로그램을 실행하려면 JRE로 충분합니다.

JRE는 Java 파일 실행을 대상으로합니다.

즉, JRE = JVM + Java 패키지 클래스 (예 : util, math, lang, awt, swing 등) + 런타임 라이브러리.

JDK는 주로 Java 개발을 대상으로합니다. 즉, Java 파일을 만들고 (Java 패키지의 도움으로) Java 파일을 컴파일하고 Java 파일을 실행할 수 있습니다.

JRE (Java Runtime Environment)

Java Runtime Environment에는 JVM, 클래스 라이브러리 및 기타 지원 파일이 포함되어 있습니다. 컴파일러, 디버거 등과 같은 개발 도구는 포함되어 있지 않습니다. 실제로 JVM은 프로그램을 실행하며 JRE에서 제공하는 클래스 라이브러리 및 기타 지원 파일을 사용합니다. Java 프로그램을 실행하려면 시스템에 JRE가 설치되어 있어야합니다.

Java Virtual Machine은 플랫폼에 독립적 인 코드 실행 방법을 제공합니다. 즉, 모든 시스템에서 한 번 컴파일하고 어디서나 실행합니다 (모든 시스템).

JVM (Java Virtual Machine)

Java 파일을 컴파일 할 때 우리 모두 알고 있듯이 출력은 'exe'가 아니라 '.class'파일입니다. '.class'파일은 JVM이 이해할 수있는 Java 바이트 코드로 구성됩니다. Java Virtual Machine은 기본 운영 체제 및 하드웨어 조합에 따라 바이트 코드를 기계 코드로 해석합니다. 가비지 수집, 배열 경계 검사 등과 같은 모든 일을 담당합니다. JVM은 플랫폼에 따라 다릅니다.

JVM은 기본 운영 체제 및 시스템 하드웨어 아키텍처에 의존하지 않는 시스템 인터페이스를 제공하기 때문에 "가상"이라고합니다. 하드웨어 및 운영 체제로부터의 이러한 독립성은 Java 프로그램의 write-once run-anywhere 가치의 초석입니다.

다른 JVM 구현이 있습니다. 성능, 안정성, 속도 등이 다를 수 있습니다. 이러한 구현은 가비지 수집 프로세스의 작동 방식이 JVM에 따라 다르지만 Java 사양은 그렇지 않은 것과 같이 Java 사양에서 기능 구현 방법을 언급하지 않는 영역에서 다를 수 있습니다. 이를 수행하는 특정 방법을 정의하십시오.


23

자바 가상 머신 (JVM)은 자바 바이트 코드를 실행할 수있는 가상 머신이다. Java 소프트웨어 플랫폼의 코드 실행 구성 요소입니다.

자바 개발 키트 (JDK)는 자바 개발자를위한 오라클 사 제품입니다. Java가 도입 된 이래 가장 널리 사용되는 Java SDK (Software Development Kit)입니다.

Java Runtime Environment 는 Java Runtime, Runtime Environment라고도합니다.

OpenJDK (Open Java Development Kit) 는 Java 프로그래밍 언어의 무료 오픈 소스 구현입니다. 이는 Sun Microsystems가 2006 년에 시작한 노력의 결과입니다. 구현은 링크 예외를 제외하고 GNU GPL (General Public License)에 따라 라이센스가 부여되었습니다.


좋은 대답이지만 한 가지 설명입니다. Oracle 이외의 업체는 JDK를 생산합니다. 예를 들어 AIX 및 z / OS 용 IBM, HP-UX 용 HP 등.
Trent Gray-Donald

16

JVM 은 Java 코드가 실행되는 가상 머신입니다.

JRE 는 Java 애플리케이션을 실행하는 데 필요한 환경 (표준 라이브러리 및 JVM)입니다.

JDK 는 개발자 도구 및 문서가있는 JRE입니다.

OpenJDK 는 Oracle이 소유 한 일반적인 JDK와 달리 JDK의 오픈 소스 버전입니다.


15

JDK (Java Development Kit) :

  • Java 프로그램을 개발하는 데 필요한 도구가 포함되어 있습니다.
  • 자체 프로그램을 작성하고 컴파일하려면 JDK가 필요합니다.
  • JDK는 주로 Java 개발을 대상으로합니다.

JRE (Java Runtime Environment)

Java Runtime Environment에는 JVM, 클래스 라이브러리 및 기타 지원 파일이 포함되어 있습니다. JRE는 Java 파일 실행을 대상으로합니다.

JVM (Java Virtual Machine)

JVM 은 기본 운영 체제 및 하드웨어 조합에 따라 바이트 코드를 기계 코드로 해석합니다 . 가비지 수집, 배열 경계 검사 등과 같은 모든 작업을 담당합니다. Java Virtual Machine은 플랫폼 독립적 인 코드 실행 방법을 제공합니다.


6

JDK -Java를 ByteCode로 컴파일합니다. 디버거, 컴파일러 등으로 구성됩니다.

javac file.java // Is executed using JDK

JVM- 바이트 코드를 실행합니다. JVM은 자바 플랫폼을 독립적으로 만드는 것입니다. 그러나 JVM은 플랫폼에 따라 다릅니다.

JRE- 자바 프로그램을 실행하기위한 자바 런타임 라이브러리와 함께 JVM.


4

언급 할만한 또 다른 측면 :

JDK (Java 개발 키트)

이름에서 알 수 있듯이 개발 목적으로 필요합니다.

예를 들어, 소프트웨어 회사는 Java 프로그램을 컴파일하고 실행하는 새로운 소프트웨어를 개발해야하기 때문에 컴퓨터에 JDK를 설치하게됩니다.

따라서 JDK = JRE + JVM이라고 말할 수 있습니다.

JRE (Java 런타임 환경)

Java 프로그램을 실행하는 데 필요합니다. 당신은 그것으로 자바 프로그램을 컴파일 할 수 없습니다.

예를 들어, 일부 온라인 게임을 실행하려는 일반 컴퓨터 사용자는 Java 프로그램을 실행하기 위해 시스템에 JRE가 필요합니다.

JVM (Java 가상 머신)

아시다시피 바이트 코드를 실행합니다. .classJava 프로그램을 컴파일 한 후 얻은 파일을 Windows, Mac 또는 Linux에서 컴파일하든 상관없이 실행하므로 Java 플랫폼을 독립적으로 만듭니다 .

JDK 열기

글쎄, 내가 위에서 말했듯이. 이제 JDK는 다른 회사에서 만들어졌으며, 공개 소스이고 공개적으로 무료로 사용되는 회사 중 하나는 OpenJDK이고 다른 회사는 Oracle Corporation의 JRockit JDK 또는 IBM JDK입니다.

그러나 그들은 모두 일반 사용자에게 동일하게 보일 수 있습니다.

결론

Java 프로그래머 인 경우 시스템에 JDK가 필요하며이 패키지에는 JRE와 JVM도 포함되지만 온라인 게임을 좋아하는 일반 사용자 인 경우 JRE 만 필요하며이 패키지에는 JDK가 없습니다. .

즉, JDK는 할아버지 JRE는 아버지이고 JVM은 아들입니다.


9
귀하의 게시물이 모든 곳에서 잘못되었습니다. JRE (런타임 환경)에는 JVM (가상 머신) 및 Java 클래스 라이브러리가 포함되어 있습니다. JDK에는 JRE와 개발자를위한 프로그래밍 도구가 포함되어 있습니다. en.wikipedia.org/wiki/JDK en.wikipedia.org/wiki/Java_virtual_machine 댓글을 수정할 때 답장을 보내면 반대표를 제거하겠습니다.
nhahtdh 2013 년

@nhahtdh 우리는 말할 수 있습니다 : jdk는 독립적 인 패키지이며, 별도로 다운로드 할 수 있습니다. JRE는 몇 가지 클래스 + 자바 플러그인 + JVM =
프라 카쉬 펜디 교수

3

Java는 언어이며 지금까지 매우 익숙해야하는 엄격하고 강력한 형식의 구문을 포함합니다.

J2SE라고도하는 Java 2 Platform, Standard Edition은 플랫폼을 참조하고 java.lang 및 java.io 패키지에 클래스를 포함했습니다. Java 애플리케이션이 구축 된 빌딩 블록이었습니다.

JVM (Java Virtual Machine)은 컴파일 된 Java 코드를 실행하는 소프트웨어 가상 머신입니다. 컴파일 된 Java 코드는 단순히 바이트 코드이므로 JVM은 실행하기 전에 해당 바이트 코드를 기계 코드로 컴파일해야합니다. (이것을 종종 Just In Time 컴파일러 또는 JIT 컴파일러라고합니다.) JVM은 또한 애플리케이션 코드가 필요하지 않도록 메모리 관리를 처리합니다.

Java Development Kit 또는 JDK는 Java 개발자가 Java 응용 프로그램을 만드는 데 사용하는 소프트웨어의 일부였습니다. 여기에는 Java 언어 컴파일러, 문서 생성기, 네이티브 코드 작업을위한 도구 및 (일반적으로) 플랫폼 클래스 디버깅을 활성화하는 플랫폼 용 Java 소스 코드가 포함되어 있습니다.

JRE (Java Runtime Environment)는 컴파일 된 Java 애플리케이션을 실행하기 위해 최종 사용자가 다운로드하는 소프트웨어의 일부였습니다. 여기에는 JVM이 포함되어 있지만 JDK에 번들로 제공되는 개발 도구는 포함되어 있지 않습니다. 그러나 JDK에는 JRE가 포함되어 있습니다.


3

JVM : Java 프로그램을 실행하는 방법 / 자원을 설명하는 사양입니다. 실제로 바이트 코드를 실행하고 Java 플랫폼을 독립적으로 만듭니다. 그렇게함으로써 플랫폼마다 다릅니다. Windows 용 JVM은 UNIX 용 JVM으로 작동 할 수 없습니다.

JRE : JVM 구현. (JVM + 런타임 라이브러리)

JDK : JRE + Java 컴파일러 및 Java 프로그램을 처음부터 빌드하기위한 기타 필수 도구


2

JVM : 이것은 실제로 바이트 코드 인터프리터를 의미하며 플랫폼에 따라 다릅니다. 예 : Windows 플랫폼에서 ' java.exe '또는 ' javaw.exe '선행 작업은 jvm 프로세스입니다.

JDK : 자바 프로그램 / 애플리케이션을 개발하고 실행하는 데 필요한 라이브러리와 유틸리티가 포함 된 툴킷입니다.

JRE : 자바 애플리케이션의 실행 환경입니다. 즉, 컴파일 된 프로그램의 경우 jvm을 포함한 런타임 종속성 만 지원합니다. 자바 프로그램을 컴파일하려면 jdk가 필요합니다.


2

JVM : 자바의 가상 머신. Java 코드로 수행 할 작업을 기계에 알려줍니다. JVM을 그대로 다운로드 할 수 없습니다. 다른 구성 요소에 패키지로 제공됩니다.

JRE : 위에서 언급 한 일부 다른 구성 요소는 JRE입니다. 런타임 환경을 만드는 것은 JVM + 기타 jar입니다.

JDK : JRE를 포함합니다 (이는 JVM을 포함합니다). JDK를 받으면 JRE와 JVM을 별도로 설치할 필요가 없습니다. .java 파일을 .class 파일로 컴파일하는 컴파일러가 포함되어 있습니다.


2

JVM

JVM (Java Virtual Machine)은 추상 시스템입니다. 자바 바이트 코드가 실행될 수있는 런타임 환경을 제공하는 사양입니다. JVM은 많은 하드웨어 및 소프트웨어 플랫폼에서 사용할 수 있습니다.

JRE

JRE는 JRE (Java Runtime Environment)의 약자로 런타임 환경을 제공하는 데 사용되며 JVM의 구현이며 물리적으로 존재하며 JVM이 런타임에 사용하는 라이브러리 세트와 기타 파일을 포함합니다.

JDK

JDK는 Java Development Kit의 약자로 물리적으로 존재하며 JRE + 개발 도구를 포함합니다.

링크 :-http: //www.javatpoint.com/difference-between-jdk-jre-and-jvm


1

요약해서 말하자면:

  • JRE = JVM + Java 패키지 (예 : util, math, lang, awt, swing 등) + 런타임 라이브러리
  • JDK = JRE + 개발 / 디버깅 도구

Java로 개발하려면 JDK가 필요하지만 Java 만 실행하려면 JRE가 필요합니다.


0

JVM Java Virtual Machine은 실제로 Java 바이트 코드를 실행합니다. JAVA 플랫폼의 실행 블록입니다. 바이트 코드를 기계 코드로 변환합니다.

JRE Java Runtime Environment는 Java 애플리케이션 실행을위한 최소 요구 사항을 제공합니다. JVM (Java Virtual Machine), 코어 클래스 및 지원 파일로 구성됩니다.

JDK Java Development Kit에는 애플리케이션 소프트웨어를 개발하기위한 모든 도구가 있습니다. JRE + JVM과 같습니다.

Open JDK 는 Java 플랫폼의 무료 오픈 소스 구현입니다.


0

평범한 용어로 : -JDK = JRE + 개발 / 디버깅 도구 , 여기서 JDK는 컴파일 생성부터 실행까지 Java와 함께 작동하는 완전한 패키지입니다.

참고 :-JDK를 설치하든 JRE를 설치하든 JVM은 패키지와 함께 번들로 제공되며 JVM은 JIT 컴파일러가 바이트 코드를 기계 별 코드로 변환하는 부분입니다.

JDK, JRE, JVM 및 JIT 에 대한 기사를 읽으십시오.


0

JDK : 자바 코드를 작성하고 실행하는 데 필요한 완전한 패키지

OpenJDK : JDK를 훨씬 더 좋게 만들기위한 독립적 인 구현

JVM : Java 코드를 바이트 코드로 변환하고 Java 코드를 컴파일,로드, 확인, 오류 확인 및 실행 방법을 알려주는 사양을 제공합니다.

JRE : 일부 Java 라이브러리를 사용하여 프로그램을 실행하는 JVM 구현


0

JRE 는 응용 프로그램을 실행하지만 JVM은 명령을 한 줄씩 읽으므로 인터프리터입니다.

JDK = JRE + 개발 도구

JRE = JVM + 라이브러리 클래스


0

JVMJava Virtual Machine 으로 축약되고 JVM은 Java 아키텍처의 주요 구성 요소입니다. JVM은 C 프로그래밍 언어로 작성되었습니다. Java 컴파일러는 JVM 용 바이트 코드를 생성합니다. JVM은 바이트 코드를 읽고 바이트 코드를 확인하고 코드를 ibrary와 연결합니다.

JREJRE ( Java Runtime Environment) 로 축약됩니다 . 런타임에 환경을 제공합니다. 물리적으로 존재합니다. 여기에는 JVM + 라이브러리 세트 (jar) + 기타 파일이 포함됩니다.

JDKJava Development Kit 로 축약됩니다 . 그것은 자바 애플리케이션을 개발하는 것입니다. 또한 자바 애플리케이션 디버깅 및 모니터링. JDK에는 JRE + 개발 도구 (javac, java)가 포함되어 있습니다.

OpenJDK OpenJDK는 sun JDK의 오픈 소스 버전입니다. Oracle JDK는 Sun의 공식 JDK입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.