[java] Oracle JDK와 OpenJDK의 차이점

참고 :이 질문은 2014 년입니다. Java 11 OpenJDK와 Oracle JDK가 수렴하고 있습니다.

Oracle과 OpenJDK간에 중요한 차이점이 있습니까?

예를 들어, 가비지 콜렉션과 다른 JVM 매개 변수가 동일합니까?

GC는 둘 사이에서 다르게 작동합니까?



답변

OpenJDK와 Oracle JDK는 모두 Oracle에 의해서만 생성되고 유지됩니다.

OpenJDK와 Oracle JDK는 TCK (Java Technology Certification Kit)를 통과 한 동일한 Java 사양을 구현 한 것입니다.

대부분의 JDK 공급 업체는 TCK 호환성을 손상시키지 않고 [주로 라이센스가있는 독점 부품을 대체하고 / 특정 OS에서만 작동하는 고성능 항목으로 대체] 몇 가지 조정을 수행하여 OpenJDK 위에 작성되었습니다.

많은 공급 업체에서 Java 사양을 구현하고 TCK를 통과했습니다. 예를 들어, IBM J9, Azul Zulu, Azul Zing 및 Oracle JDK입니다.

거의 모든 기존 JDK는 OpenJDK에서 파생됩니다.

많은 사람들이 제안한 바와 같이 라이센스는 JDK간에 변경됩니다.

JDK 11부터 장시간 지원에 액세스 Oracle JDK / Java SE는 이제 상용 라이센스가 필요합니다. 구독없이 Oracle JDK로 설치중인 JDK에주의를 기울여야합니다. 출처

Ref : Java 가상 머신 목록


답변

들어 자바 7 , 중요한 아무것도. OpenJDK 프로젝트는 주로 Sun이 기증 한 HotSpot 소스 코드를 기반으로 합니다.

또한 OpenJDK는 Java 7에 대한 참조 구현 으로 선정 되었으며 Oracle 엔지니어가 유지 관리합니다.

JVM, JDK, JRE & OpenJDK의 차이점대해 2012 년부터 오라클 블로그 게시물에 링크 된 더 자세한 답변이 있습니다 .

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

A : 매우 가깝습니다. Oracle JDK 릴리스에 대한 빌드 프로세스는 배포 코드와 같이 Oracle의 Java 플러그인 및 Java WebStart 구현과 일부 폐쇄 소스 3을 포함하여 몇 가지만 추가하여 OpenJDK 7에서 빌드합니다. 그래픽 래스터 라이저와 같은 타사 구성 요소, Rhino와 같은 일부 오픈 소스 타사 구성 요소 및 추가 문서 나 타사 글꼴과 같은 몇 가지 요소가 있습니다. 앞으로 우리는 JRockit Mission Control (Oracle JDK에서는 아직 제공되지 않음)과 같은 상업적 기능을 고려하는 것을 제외하고 Oracle JDK의 모든 부분을 오픈 소스로 만들고, 더 가까운 패리티를 달성하기 위해 방해가되는 타사 구성 요소를 오픈 소스 대안으로 대체하는 것을 목표로합니다. 코드베이스 사이.


답변

앞으로의 주요 차이점은 출시 일정 및 지원 정책입니다.

OpenJDK

OpenJDK는 6 개월마다 기능 릴리스를 제공하며 다음 기능 릴리스까지만 지원됩니다. 본질적으로 개발자를 대상으로 한 지속적인 릴리스 스트림입니다.

Oracle JDK

Oracle JDK는 안정성을 중시하는 기업 고객을 대상으로합니다. OpenJDK 릴리스 중 하나를 기반으로하지만 장기 지원 (LTS)이 제공됩니다. Oracle JDK는 3 년마다 릴리스를 계획하고 있습니다.

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

출처 : https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events


답변

들어 자바 (8) , 오픈 JDK 대 오라클 JDK는 키 차이 걸릴 수도있다 :

  • OpenJDK는 Oracle 및 개방형 Java 커뮤니티에서 제공하는 Java Standard Edition 플랫폼의 개방형 소스 구현입니다.

  • OpenJDK는 라이센스 GPL v2에 따라 릴리스되며 Oracle JDK는 Oracle Binary Code License Agreement에 따라 라이센스가 부여됩니다.

  • 실제로 Oracle JDK의 빌드 프로세스는 OpenJDK 소스 코드에서 빌드됩니다. 따라서 Oracle JDK와 OpenJDK 사이에는 큰 기술적 차이가 없습니다. 기본 코드 외에 Oracle JDK에는 Oracle의 Java Plugin 및 Java WebStart 구현이 포함됩니다. 또한 그래픽 래스터 라이저 및 Rhino 와 같은 타사 비공개 소스 및 공개 소스 구성 요소도 각각 포함합니다. OpenJDK Font Renderer와 Oracle JDK Flight Recorder는 Oracle JDK와 OpenJDK의 주요 차이점입니다.

  • Rockit은 Oracle의 JVM이었으며 Java SE 7부터 HotSpot 및 JRockit이 단일 JVM으로 병합되었습니다. 이제 병합 된 HotSpot JVM 만 사용할 수 있습니다.
  • 사람들이 OpenJDK를 실행하는 동안 문제가 있다고 주장하고 Oracle JDK로 전환하면 해결 된 사례가 있습니다.
  • 트위터에는 자체 JDK가 있습니다.
  • Minecraft와 같은 소프트웨어는 Oracle JDK가 사용될 것으로 예상합니다. 실제로는 경고합니다.

차이점에 대한 전체 목록은 Oracle JDK와 OpenJDK 및 Java JDK 개발 프로세스 의 소스 기사를 참조하십시오.


답변

Oracle 및 OpenJDK JVM은 동일하며 GC 기능이 동일합니다 (최신 버전 10 이상). Oracle이 OpenJDK JVM을 관리하기 전에 이전 Openjdk JVM을 여러 환경에서 거의 사용할 수 없게하는 구체적인 차이점이있었습니다. JVM은 이제 동일합니다.

키트의 일부로 JVM을 포함하는 JDK는 라이센스, 릴리스 및 유지 관리 일정 및 JDK에 포함 된 소프트웨어 라이브러리에 따라 다릅니다. 나에게 중요한 차이점은 코드가 존재하지 않으면 코드가 실행되지 않는 것을 의미합니다. 라이센스뿐만 아니라

diff --brief -r openjdk oraclejdk

결정적으로 리눅스 JDK에있는 다른 파일들 외에도 다음 파일이 누락되었습니다 (따라서 코드를 ‘확장’했다면 OpenJDK에서 작동하지 않았고 javafx를 사용하는 동안 OracleJDK에서 그렇게했습니다. 정확합니다).

Only in jdk-10.0.1/bin: javapackager
Only in jdk-10.0.1/bin: javaws
Only in jdk-10.0.1/bin: jcontrol
Only in jdk-10.0.1/bin: jmc
Only in jdk-10.0.1/bin: jweblauncher
Only in jdk-10.0.1/lib: ant-javafx.jar
Only in jdk-10.0.1/lib: deploy
Only in jdk-10.0.1/lib: deploy.jar
Only in jdk-10.0.1/lib: desktop
Only in jdk-10.0.1/lib: fontconfig.bfc
Only in jdk-10.0.1/lib: fontconfig.properties.src
Only in jdk-10.0.1/lib: fontconfig.RedHat.6.bfc
Only in jdk-10.0.1/lib: fontconfig.RedHat.6.properties.src
Only in jdk-10.0.1/lib: fontconfig.SuSE.11.bfc
Only in jdk-10.0.1/lib: fontconfig.SuSE.11.properties.src
Only in jdk-10.0.1/lib: fonts
Only in jdk-10.0.1/lib: javafx.properties
Only in jdk-10.0.1/lib: javafx-swt.jar
Only in jdk-10.0.1/lib: java.jnlp.jar
Only in jdk-10.0.1/lib: javaws.jar
Only in jdk-10.0.1/lib: jdk.deploy.jar
Only in jdk-10.0.1/lib: jdk.javaws.jar
Only in jdk-10.0.1/lib: jdk.plugin.jar
Only in jdk-10.0.1/lib: jfr
Only in jdk-10.0.1/lib: libavplugin-53.so
Only in jdk-10.0.1/lib: libavplugin-54.so
Only in jdk-10.0.1/lib: libavplugin-55.so
Only in jdk-10.0.1/lib: libavplugin-56.so
Only in jdk-10.0.1/lib: libavplugin-57.so
Only in jdk-10.0.1/lib: libavplugin-ffmpeg-56.so
Only in jdk-10.0.1/lib: libavplugin-ffmpeg-57.so
Only in jdk-10.0.1/lib: libbci.so
Only in jdk-10.0.1/lib: libcmm.so
Only in jdk-10.0.1/lib: libdecora_sse.so
Only in jdk-10.0.1/lib: libdeploy.so
Only in jdk-10.0.1/lib: libfxplugins.so
Only in jdk-10.0.1/lib: libglassgtk2.so
Only in jdk-10.0.1/lib: libglassgtk3.so
Only in jdk-10.0.1/lib: libglass.so
Only in jdk-10.0.1/lib: libgstreamer-lite.so
Only in jdk-10.0.1/lib: libjavafx_font_freetype.so
Only in jdk-10.0.1/lib: libjavafx_font_pango.so
Only in jdk-10.0.1/lib: libjavafx_font.so
Only in jdk-10.0.1/lib: libjavafx_iio.so
Only in jdk-10.0.1/lib: libjfxmedia.so
Only in jdk-10.0.1/lib: libjfxwebkit.so
Only in jdk-10.0.1/lib: libnpjp2.so
Only in jdk-10.0.1/lib: libprism_common.so
Only in jdk-10.0.1/lib: libprism_es2.so
Only in jdk-10.0.1/lib: libprism_sw.so
Only in jdk-10.0.1/lib: librm.so
Only in jdk-10.0.1/lib: libt2k.so
Only in jdk-10.0.1/lib: locale
Only in jdk-10.0.1/lib: missioncontrol
Only in jdk-10.0.1/lib: oblique-fonts
Only in jdk-10.0.1/lib: plugin.jar
Only in jdk-10.0.1/lib: plugin-legacy.jar
Only in jdk-10.0.1/lib/security: blacklist
Only in jdk-10.0.1/lib/security: public_suffix_list.dat
Only in jdk-10.0.1/lib/security: trusted.libraries
Only in openjdk-10.0.1: man`


답변

오라클 블로그에 따르면 Java 11 이상용 Oracle JDK 릴리스

Java 11부터 Oracle은 오픈 소스 GNU General Public License v2, Classpath Exception (GPLv2 + CPE) 및 Oracle JDK를 Oracle 제품 또는 서비스의 일부로 사용하는 사람들을위한 상업용 라이센스로 JDK 릴리스를 제공합니다. 또는 오픈 소스 소프트웨어를 사용하지 않으려는 사람. 오픈 소스 라이센스와 상업용 라이센스 의 조합은 무료 및 유료 상업용 용어가 결합 된 역사적 ” BCL “라이센스를 대체합니다 .

각 라이센스마다 다른 빌드가 제공되지만 이러한 빌드는 아래에 자세히 설명 된 일부 화장품 및 패키징 차이점과 기능적으로 동일합니다.

BCL에서 GPL로

오라클 자바 SE 기술 ( “BCL”)에 대한 이진 코드 라이센스는 10 년이 넘게 오라클 자바 SE 기술에 대한 기본 라이센스하고있다. BCL은 특정 조건 하에서 라이센스 비용없이 사용할 수 있습니다. 향후 상황을 단순화하기 위해 Oracle 은 Linux 플랫폼과 동일한 라이센스 모델을 사용하여 Java 9 부터 오픈 소스 라이센스 OpenJDK 빌드제공 하기 시작했습니다 . Oracle Java SE 바이너리를 무료로 얻는 데 익숙한 경우 jdk.java.net 에서 제공되는 Oracle OpenJDK 빌드를 사용하여 계속 진행할 수 있습니다 . Oracle의 상용 제품 또는 서비스의 일부로 Oracle Java SE 바이너리를 얻는 데 익숙하다면 My Oracle Support (MOS) 및 기타 위치를 통해 Oracle JDK 릴리스를 계속 얻을 수 있습니다.

기능적으로 동일하고 상호 교환 가능 …

Oracle의 BCL 라이센스가있는 JDK에는 역사적으로 OpenJDK 빌드에서는 사용할 수 없었던“상업 기능”이 포함되어있었습니다. 그러나 약속 한대로 지난 1 년 동안 Oracle은 이러한 기능을 OpenJDK 커뮤니티에 기여했습니다.

따라서 Java 11부터 Oracle JDK 빌드와 OpenJDK 빌드 는 본질적으로 동일합니다.

… 화장품과 포장의 차이점이 있지만

OpenJDK 기고자와 논의 할 시간이 더 필요하기 때문에 약간의 차이, 일부는 의도적이며 장식적인 부분이 남아 있습니다.

  • Oracle JDK 11은 -XX : + UnlockCommercialFeatures 옵션을 사용할 때 경고를 표시하지만 OpenJDK 빌드에서는이 옵션으로 오류가 발생합니다. 이 옵션은 OpenJDK의 일부가 아니며 OpenJDK에 상용 기능이 없기 때문에 지금 추가하는 것은 의미가 없습니다. Oracle JDK 10 및 이전 릴리스의 사용자가 Oracle JDK 11 이상으로 쉽게 마이그레이션 할 수 있도록하기 위해 이러한 차이점이 남아 있습니다.
  • Oracle JDK 11은 ” Advanced Management Console에 사용 로그 데이터를 제공하도록 구성 할 수 있습니다. 별도의 상용 Oracle 제품인 “도구에 . 우리는 다른 OpenJDK 기고자들과 협력하여 그러한 사용 데이터가 향후 릴리스에서 OpenJDK에서 어떻게 유용 할 수 있는지 논의 할 것입니다. 이러한 차이는 주로 결정이 내려 질 때까지 Oracle 고객에게 일관된 경험을 제공하기 위해 유지됩니다.
  • javac –release 명령은 Java 9 및 Java 10 대상에 대해 다르게 작동합니다. 해당 릴리스에서는 Oracle JDK에 해당 OpenJDK 릴리스의 일부가 아닌 추가 모듈이 포함 되었기 때문입니다.
    • javafx.base
    • javafx.controls
    • javafx.fxml
    • javafx.graphics
    • javafx.media
    • javafx.web
    • java.jnlp
    • jdk.jfr
    • jdk.management.cmm
    • jdk.management.jfr
    • jdk.management.resource
    • jdk.packager.services
    • jdk.snmp

이러한 차이는 특정 종류의 레거시 사용에 일관된 경험을 제공하기 위해 남아 있습니다. 이러한 모듈은 이제 OpenJFX의 일부로 개별적으로 사용 가능 하며, Oracle이 OpenJDK (예 : Flight Recorder)에 기여한 상용 기능이거나 Oracle JDK 11 (예 : JNLP)에서 제거 된 상용 기능이기 때문에 OpenJDK와 Oracle JDK 모두에서 사용할 수 있습니다. .

  • java –version 및 java -fullversion 명령의 출력은 Oracle JDK 빌드와 OpenJDK 빌드를 구별하여 지원 팀이 존재할 수있는 모든 문제를 진단 할 수 있습니다. 특히 Oracle JDK 11 빌드에서 java –version을 실행하면 다음과 같은 결과가 발생합니다.

자바 11 2018-09-25

Java (TM) SE 런타임 환경 18.9 (빌드 11 + 28)

Java HotSpot ™ 64 비트 서버 VM 18.9 (빌드 11 + 28, 혼합 모드)

OpenJDK 11 빌드의 경우 :

openjdk 버전 “11”2018-09-25

OpenJDK 런타임 환경 18.9 (빌드 11 + 28)

OpenJDK 64 비트 서버 VM 18.9 (빌드 11 + 28, 혼합 모드)

  • Oracle JDK는 항상 타사 암호화 공급자가 알려진 인증서로 서명해야했습니다. OpenJDK의 암호화 프레임 워크에는 개방형 암호화 인터페이스가 있으므로 사용할 수있는 공급자를 제한하지 않습니다. Oracle JDK 11은 계속 요구할 것입니다 유효한 서명 하며, Oracle OpenJDK 빌드는 유효한 서명 또는 서명되지 않은 타사 암호화 공급자를 계속 사용할 수 있습니다.
  • Oracle JDK 11은 레거시 데스크탑 사용과 일관된 경험을 위해 설치 프로그램, 브랜딩 및 JRE 패키징을 계속 포함합니다. Oracle OpenJDK 빌드는 현재 zip 및 tar.gz 파일로 제공되며 대체 배포 형식도 고려됩니다.

답변

Oracle JDK 11과 OpenJDK 11의 나머지 화장품 및 패키징 차이점은이 블로그 게시물에서 확인할 수 있습니다.

https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later

한마디로 :

  • -XX : + UnlockCommercialFeatures 옵션을 사용할 때 Oracle JDK 11이 경고를 표시합니다.
  • “고급 관리 콘솔”도구에 사용 로그 데이터를 제공하도록 구성 할 수 있습니다.
  • 항상 타사 암호화 공급자가 알려진 인증서로 서명해야했습니다.
  • 설치 프로그램, 브랜딩 및 JRE 패키징이 계속 포함됩니다.
  • javac –release 명령은 Java 9 및 Java 10 대상에 대해 약간 다르게 동작합니다.
  • java –version 및 java -fullversion 명령의 출력은 Oracle JDK 빌드와 OpenJDK 빌드를 구별합니다.