[java] JDK와 JRE의 차이점은 무엇입니까?

JDK와 JRE의 차이점은 무엇입니까?

그들의 역할은 무엇이며 언제 사용해야합니까?



답변

JRE는 은 IS 자바 런타임 환경 . JVM (Java Virtual Machine), Java 클래스 라이브러리, java명령 및 기타 인프라를 포함하여 컴파일 된 Java 프로그램을 실행하는 데 필요한 모든 패키지입니다 . 그러나 새 프로그램을 작성하는 데 사용할 수 없습니다.

JDK는 은 IS 자바 개발 키트 , 자바의 모든 기능을 갖춘 SDK. 그것은 JRE가 모든 것을뿐만 아니라 컴파일러 (가 javac) 및 도구를 (같은 javadocjdb). 프로그램을 작성하고 컴파일 할 수 있습니다.

일반적으로 컴퓨터에서 Java 프로그램 실행에만 관심이있는 경우 JRE 만 설치합니다. 당신이 필요한 전부입니다. 반면에 일부 Java 프로그래밍을 수행하려는 경우 JDK를 대신 설치해야합니다.

때때로 컴퓨터에서 Java 개발을 수행하지 않더라도 JDK가 설치되어 있어야합니다. 예를 들어 JSP를 사용하여 웹 응용 프로그램을 배포하는 경우 기술적으로 응용 프로그램 서버 내에서 Java 프로그램을 실행하는 것입니다. 그렇다면 왜 JDK가 필요할까요? 애플리케이션 서버가 JSP를 Java 서블릿으로 변환하고 서블릿을 컴파일하기 위해 JDK를 사용해야합니다. 더 많은 예가 있다고 확신합니다.


답변

위의 대답 (Pablo의 답변)은 매우 옳습니다. 이것은 추가 정보 일뿐입니다.

JRE는 이름,에서 알 수 있듯이, 인 환경을 . 기본적으로 Java 관련 파일이있는 디렉토리입니다.

  • bin/Java의 실행 가능 프로그램을 포함합니다. 가장 중요한 것은 java(및 Windows의 경우 javaw) JVM을 시작합니다. 같은뿐만 아니라 여기에 몇 가지 다른 유틸리티있다 keytoolpolicytool.
  • conf/ Java 전문가가 사용할 수있는 사용자 편집 가능한 구성 파일을 보유합니다.
  • lib/일부 지원 파일 (일부 .jar, 구성 파일, 등록 정보 파일, 글꼴, 번역, 인증서 등) – Java의 모든 “트리밍”. 가장 중요한 것은 Java 표준 라이브러리의 modules파일을 포함하는 .class파일입니다.
  • 특정 수준에서 Java 표준 라이브러리는 기본 코드를 호출해야합니다. 이를 위해 JRE에는 시스템 별 고유 이진 코드를 지원 하거나 지원하는 일부 .dll(Windows) 또는 .dylib(macOS) 또는 .so(Linux) 파일이 포함되어 있습니다.bin/lib/

JDK는 또한 디렉토리의 집합입니다. 추가 된 JRE의 상위 집합입니다.

  • bin/개발 도구로 확대되었습니다. 그들 중 가장 중요한 것은 javac; 다른 것은 jar, javadoc및을 포함 jshell합니다.
  • jmods/표준 라이브러리 용 JMOD 파일을 보유하고있는가 추가되었습니다. 이 파일을 사용하면 표준 라이브러리를와 함께 사용할 수 있습니다 jlink.

답변

여기에 이미지 설명을 입력하십시오

JDK는 JRE의 상위 집합이며 JRE에있는 모든 항목과 애플릿 및 응용 프로그램 개발에 필요한 컴파일러 및 디버거와 같은 도구를 포함합니다. JRE는 라이브러리, JVM (Java Virtual Machine) 및 Java 프로그래밍 언어로 작성된 애플릿 및 애플리케이션을 실행하기위한 기타 구성 요소를 제공합니다.


답변

평신도 용어로 : JDK는 할아버지입니다. JRE는 아버지이고 JVM은 그들의 아들입니다.
[즉, JDK> JRE> JVM]

JDK = JRE + 개발 / 디버깅 툴

JRE = JVM + Java 패키지 클래스 (유틸리티, 수학, lang, awt, 스윙 등) + 런타임 라이브러리.

JVM = 클래스 로더 시스템 + 런타임 데이터 영역 + 실행 엔진

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

JVM :

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

JDK와 JRE

JDK와 JRE의 차이점을 설명하려면 Oracle 설명서를 읽고 다이어그램을 참조하십시오.

JRE (Java Runtime Environment)

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

JDK (Java 개발 키트)

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

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

JIT 컴파일 프로세스 (과정 : Oracle 문서)

JDK> JRE> JVM


답변

공식 자바 웹 사이트에서 …

JRE (Java Runtime Environment) :

  • 실제로 Java 프로그램을 실행하는 Java Virtual Machine *의 구현입니다.
  • Java Runtime Environment는 Java 프로그램을 실행하는 데 필요한 플러그인입니다.
  • JRE는 JDK보다 작으므로 적은 디스크 공간이 필요합니다.
  • JRE는 https://www.java.com 에서 무료로 다운로드 / 지원할 수 있습니다.
  • 여기에는 JVM, 코어 라이브러리 및 Java로 작성된 애플리케이션 및 애플릿을 실행하기위한 기타 추가 구성 요소가 포함됩니다.

JDK (Java 개발 키트)

  • Java 기반 응용 프로그램을 개발하는 데 사용할 수있는 소프트웨어 번들입니다.
  • Java 응용 프로그램을 개발하려면 Java Development Kit가 필요합니다.
  • JDK에는 다양한 개발 도구와 함께 JRE가 포함되어 있으므로 더 많은 디스크 공간이 필요합니다.
  • JDK는 https://www.oracle.com/technetwork/java/javase/downloads/ 에서 자유롭게 다운로드 / 지원할 수 있습니다.
  • 여기에는 JRE, API 클래스 세트, Java 컴파일러, 웹 시작 및 Java 애플릿 및 애플리케이션 작성에 필요한 추가 파일이 포함됩니다.

답변

디버깅 관점과의 차이점 :

String 및 ArrayList와 같은 Java 시스템 클래스로 디버그하려면 “디버그 정보”로 컴파일 된 특수 버전의 JRE가 필요합니다. JDK에 포함 된 JRE는이 정보를 제공하지만 일반 JRE는 제공하지 않습니다. 일반 JRE에는 성능 향상을 위해이 정보가 포함되어 있지 않습니다.

디버깅 정보 란 무엇입니까? 이 블로그 게시물 에서 가져온 간단한 설명은 다음과 같습니다 .

현대의 컴파일러는 잘 들여 쓰기되고 중첩 된 제어 구조와 임의로 입력 된 변수를 사용하여 고급 코드를 기계 코드 (또는 Java의 경우 바이트 코드)라는 큰 비트 더미로 변환하는 데 매우 효과적입니다. 대상 CPU (JVM의 가상 CPU)에서 가능한 빨리 실행하십시오. Java 코드는 여러 머신 코드 명령어로 변환됩니다. 변수는 스택, 레지스터 또는 완전히 최적화 된 곳 어디에서나 밀려납니다. 구조와 객체는 결과 코드에도 존재하지 않으며 단지 하드 코딩 된 오프셋으로 메모리 버퍼로 변환되는 추상화 일뿐입니다.

그렇다면 디버거는 어떤 함수의 엔트리를 중단하도록 요청할 때 어디서 멈추어야하는지 어떻게 알 수 있습니까? 변수 값을 요청할 때 표시 할 내용을 어떻게 찾습니까? 정답은 – 디버깅 정보입니다.

디버깅 정보는 머신 코드와 함께 컴파일러에 의해 생성됩니다. 실행 프로그램과 원본 소스 코드 간의 관계를 나타냅니다. 이 정보는 사전 정의 된 형식으로 인코딩되어 기계 코드와 함께 저장됩니다. 이러한 많은 형식은 여러 플랫폼과 실행 파일을 위해 수년 동안 발명되었습니다.


답변

JVM, JRE, JDK-이것들은 모두 Java 언어의 중추입니다. 각 구성 요소는 별도로 작동합니다. JDK와 JRE는 물리적으로 존재하지만 JVM은 물리적으로 존재하지 않는 추상 시스템입니다.

JVM 은 “바이트 코드”로 알려진 중간 코드를 확인하는 데 사용되는 JDK 및 JRE의 하위 시스템입니다. 먼저 JVM 서브 시스템 클래스 로더 및 사용에 따라 분류 된 메모리 위치 (클래스 영역, 스택, 힙 및 pc 레지스터)를 통해 Java 컴파일러 (javac)에 의해 생성 된 “클래스 파일”(.c 확장자를 가짐)을로드합니다. 그런 다음 모든 바이트 코드를 검사하여 네트워크에서 Java 및 모든 메모리 액세스 액세스로 리턴되는지 확인합니다. 통역사의 작업은 프로그램 전체를 한 줄씩 점검하는 곳에서 시작됩니다. 결과는 런타임 기능인 JRE (Java Runtime Environment)를 통해 콘솔 / 브라우저 / 애플리케이션에 최종적으로 표시됩니다.

JRE 는 JVM과 같은 런타임 기능, 클래스, .jar 파일과 같은 실행 파일 등을 제공하는 JDK의 하위 시스템입니다.

JDK 는 Java Development Kit의 약자입니다. 클래스, 메소드, 스윙, AWT, 패키지, Java (인터프리터), javac (컴파일러), 애플릿 뷰어 (애플릿 애플리케이션 뷰어) 등과 같이 Java 프로그래밍에 사용되는 모든 필수 구성 요소를 포함합니다. 결론적으로 개발에 필요한 모든 파일이 포함됩니다. 독립형 또는 웹 기반 응용 프로그램