참고 :이 질문은 2014 년입니다. Java 11 OpenJDK와 Oracle JDK가 수렴하고 있습니다.
Oracle과 OpenJDK간에 중요한 차이점이 있습니까?
예를 들어, 가비지 콜렉션과 다른 JVM 매개 변수가 동일합니까?
GC는 둘 사이에서 다르게 작동합니까?
참고 :이 질문은 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는 6 개월마다 기능 릴리스를 제공하며 다음 기능 릴리스까지만 지원됩니다. 본질적으로 개발자를 대상으로 한 지속적인 릴리스 스트림입니다.
Oracle JDK는 안정성을 중시하는 기업 고객을 대상으로합니다. OpenJDK 릴리스 중 하나를 기반으로하지만 장기 지원 (LTS)이 제공됩니다. Oracle JDK는 3 년마다 릴리스를 계획하고 있습니다.
들어 자바 (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의 주요 차이점입니다.
차이점에 대한 전체 목록은 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`
diff
으로 했습니까?
오라클 블로그에 따르면 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 기고자와 논의 할 시간이 더 필요하기 때문에 약간의 차이, 일부는 의도적이며 장식적인 부분이 남아 있습니다.
이러한 차이는 특정 종류의 레거시 사용에 일관된 경험을 제공하기 위해 남아 있습니다. 이러한 모듈은 이제 OpenJFX의 일부로 개별적으로 사용 가능 하며, Oracle이 OpenJDK (예 : Flight Recorder)에 기여한 상용 기능이거나 Oracle JDK 11 (예 : JNLP)에서 제거 된 상용 기능이기 때문에 OpenJDK와 Oracle JDK 모두에서 사용할 수 있습니다. .
자바 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 11과 OpenJDK 11의 나머지 화장품 및 패키징 차이점은이 블로그 게시물에서 확인할 수 있습니다.
https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
한마디로 :
Java 11에서 큰 변화로
오라클은 오픈 소스와 상용 라이센스의 조합으로 과거“BCL”라이센스를 변경합니다
업데이트 : 2019 년 8 월 25 일
자세한 내용은 oracle-vs-openjdk
명백한 라이센싱 차이 외에도 OpenJDK와 OracleJDK 11의 주요 차이점은 안정성 및 성능 업데이트입니다.
출처 : https://www.youtube.com/watch?v=Adv9--6IcQI&t=385
6 개월마다 두 개의 코드베이스가 동기화됩니다. 그러나 6 개월 동안 OpenJDK는 보안 업데이트 만 받고 OracleJDK는 추가 안정성 및 성능 업데이트를받습니다.
OpenJDK와 OracleJDK 둘 다에 대해 업데이트 릴리스가 3 개월마다 발생한다는 것을 감안할 때 이는 다음 주요 릴리스가 나오고 업그레이드 할 때까지 최대 3 개월간 수정 사항이 누락되었음을 의미합니다. 그러나 LTS 릴리스를 고수하기로 선택하면 상업용 라이센스가 더 의미가 있습니다.
또한 Java 8의 경우 AMIS Technology Blog가 다양한 JVM에서 호스팅하는 반응성 (비 차단) Spring Boot REST 응용 프로그램에 대한 흥미로운 성능 벤치 마크가 2018 년 11 월에 발표되어 다음과 같은 차이점이 있습니다.
자세한 내용은 소스 기사를 참조하십시오.
물론 YMMV는 벤치 마크 중 하나 일뿐입니다.
본인은 Oracle JDK를 프로덕션 환경에서 사용할 수 없으므로 회사를 위해 구축중인 웹 응용 프로그램에 대해 합법적으로 (유료없이) 사용할 수 없다는 것을 알고 있습니다. OpenJDK를 사용해야합니다. 내가 틀렸다면 정정 해주세요! 에서 이 문서 .
Java 11부터 Oracle JDK는 개발 및 테스트 환경으로 제한됩니다. 상업적 지원을 구매 한 경우 Oracle JDK는 프로덕션 환경에서만 사용할 수 있습니다. 대신 오라클은 OpenJDK 기반의 Java 빌드를 무료로 제공하여 프로덕션 환경에서 사용할 수 있습니다. 그러나 공식 Oracle JDK의 경우 실제 로드맵은 다음과 같습니다.
업데이트 : 나는 틀렸다. Oracle JDK를 무료로 사용할 수는 있지만 6 개월 후에 보안 업데이트를받지 못하므로 위험을 감수해야합니다. 위의 링크 된 기사 섹션 "새 릴리스 기차가 내 회사에 어떤 의미가 있습니까?"를 참조하십시오.