Oracle JDK와 OpenJDK의 차이점
참고: 이 질문은 2014년부터입니다.자바 11을 기준으로 오픈JDK와 오라클 JDK가 융합하고 있다.
오라클과 OpenJDK 사이에 중요한 차이점이 있는가?
예를 들어 가비지 수집과 다른 JVM 매개변수가 동일한가?
GC는 둘 사이에 다르게 작용하는가?
OpenJDK와 Oracle JDK는 모두 Oracle에서만 생성 및 유지 관리되고 있다.
OpenJDK와 Oracle JDK는 TCK(Java Technology Certification Kit)를 통과한 동일한 Java 사양의 구현이다.
대부분의 JDK 벤더는 TCK 호환성을 깨지 않고 [대부분적으로 라이선스된 독점 부품을 대체/특정 OS에서만 동작하는 보다 고성능의 아이템으로 대체]로 몇 번 수정하여 OpenJDK 위에 작성한다.
많은 벤더가 자바 사양을 구현하여 TCK를 통과시켰다.예를 들어 IBM J9, Azul Zulu, Azul Zing, Oracle JDK 등이 있다.
거의 모든 기존 JDK는 OpenJDK에서 파생된다.
많은 사람들이 제안했듯이, 라이선스는 JDK들 사이의 변화다.
JDK 11을 시작으로 오랜 기간 지원된 Oracle JDK/Java SE에 액세스하려면 이제 상용 라이센스가 필요하다.이제 구독 없이 Oracle JDK로 설치할 JDK가 작동을 중지할 수 있는 JDK에 주목하십시오. 소스
참조: Java 가상 시스템 목록
자바 7의 경우, 중요한 것은 아무것도 없다.오픈JDK 프로젝트는 선 감독이 기증한 HotSpot 소스코드를 주로 기반으로 한다.
또한, OpenJDK는 Java 7에 대한 참조 구현으로 선정되었으며 오라클 엔지니어가 관리하고 있다.
Oracle 블로그 게시물로 연결되는 JVM, JDK, JRE & OpenJDK의 차이점에 대한 2012년도의 보다 자세한 답변:
Q: OpenJDK 저장소에 있는 소스 코드와 Oracle JDK를 구축하는 데 사용하는 코드의 차이점은?
A: 매우 유사함 - 오라클 JDK 릴리즈의 빌드 프로세스는 오라클의 Java Plugin 및 Java WebStart 구현을 포함하는 배포 코드와 같은 몇 가지 요소와 그래픽 래스터라이저와 같은 일부 폐쇄 소스 타사 구성 요소, R과 같은 일부 오픈 소스 타사 구성 요소를 추가하여 OpenJDK 7을 기반으로 구축됨히노, 그리고 여기 저기에 있는 몇 가지 조각들, 추가 문서나 제3자 글꼴 같은 것.앞으로 JRockit Mission Control(오라클 JDK에서는 아직 사용할 수 없음)과 같은 상업적 기능을 고려하는 요소를 제외한 오라클 JDK의 모든 부분의 소스를 개방하고, 인코딩된 제3자 구성 요소를 오픈 소스 대안으로 교체하여 코드 베이스 간의 보다 긴밀한 패리티를 달성하는 것이 우리의 의도다.
앞으로의 주요 차이점은 출시 일정과 지원 정책이다.
오픈JDK
오픈JDK는 6개월마다 피쳐 릴리즈를 진행하며, 다음 피쳐 릴리즈까지만 지원된다.기본적으로 개발자를 대상으로 한 지속적인 릴리스 스트림입니다.
오라클 JDK
Oracle JDK는 안정성을 중시하는 기업 대상 고객을 더욱 겨냥하고 있다.이 제품은 OpenJDK 릴리즈 중 하나를 기반으로 하지만 장기 지원(LTS)을 받는다.오라클 JDK는 3년마다 출시될 예정이다.
Java 8, Oracle JDK의 경우 vs.OpenJDK 주요 차이점:
OpenJDK는 오라클과 오픈 자바 커뮤니티의 기여를 받아 Java Standard Edition 플랫폼의 오픈 소스 구현이다.
OpenJDK는 라이센스 GPL v2로 릴리즈되며 오라클 JDK에서는 오라클 바이너리 코드 라이센스 계약에 따라 라이센스가 부여된다.
실제로 오라클 JDK의 빌드 프로세스는 OpenJDK 소스 코드에서 빌드된다.따라서 오라클 JDK와 OpenJDK 사이에는 큰 기술적 차이가 없다.기본 코드와 별도로 Oracle JDK에는 Oracle의 Java Plugin 및 Java WebStart 구현이 포함된다.또한 그래픽 래스터라이저와 라이노와 같은 제3자 폐쇄 소스와 오픈 소스 컴포넌트를 각각 포함한다.OpenJDK Font Render와 Oracle JDK Flight Recorder는 Oracle JDK와 OpenJDK의 주요 차이점이다.
- Rockit은 Oracle의 JVM이었고 Java SE 7로부터 HotSpot과 JRockit은 단일 JVM으로 합병되었다.이제 병합된 HotSpot JVM만 사용할 수 있게 되었다.
- OpenJDK를 실행하면서 문제가 생겼다고 주장하다가 Oracle JDK로 전환하면서 해결된 사례도 있다.
- 트위터는 그들만의 JDK를 가지고 있다.
- 마인크래프트와 같은 소프트웨어는 오라클 JDK가 사용될 것으로 기대하고 있다.사실 경고한다.
차이점의 전체 목록은 다음 출처 문서를 참조하십시오.Oracle JDK 대 OpenJDK 및 Java JDK 개발 프로세스
오라클과 OpenJDK JVM은 동일하며 GC 기능(최신 버전 10+ 기준)이 동일하다.Oracle이 OpenJDK JVM을 관리하기 전에는 많은 환경에서 이전 OpenJDK JVM을 거의 사용할 수 없게 만드는 구체적인 차이가 있었다.JVM은 이제 동일하다.
키트의 일부로 JVM을 포함하는 JDK는 라이센스, 릴리스 및 유지 보수 스케줄, JDK에 포함된 소프트웨어 라이브러리에 따라 다르다. 나에게 중요한 차이점은 존재하지 않으면 코드가 실행되지 않는 것을 의미한다.라이센스만 있는 것이 아니다.
diff --brief -r openjdk oraclejdk
결정적으로 Linux JDK의 다른 파일들 외에 다음 파일들이 누락됨(따라서 OpenJDK에서 코드가 작동하지 않고 Oracle에서 코드를 '청구'한 경우).JDK: Javafx 사용 중 정답:
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`
Oracle 블로그에 따르면 Oracle JDK Release for Java 11 이상
오라클은 Java 11을 시작으로 오픈 소스 GNU GNU General Public License v2, 클래스 경로 예외(GPLv2+CPE) 및 오라클 제품 또는 서비스의 일부로 오라클 JDK를 사용하는 사람들을 위한 상용 라이센스에 따라 JDK 릴리즈를 제공하거나 오픈 소스 소프트웨어를 사용하지 않으려는 사용자를 위해 JDK 릴리즈를 제공한다.오픈 소스 라이선스와 상용 라이선스를 사용하는 이러한 조합은 무료 및 유료 상업용어의 조합을 가졌던 과거 "BCL" 라이선스를 대체한다.
각 면허에 대해 서로 다른 빌드가 제공되지만, 이러한 빌드는 아래에 자세히 설명된 일부 화장품 및 포장 차이 외에도 기능적으로 동일하다.
BCL에서 GPL로
오라클 Java SE 기술에 대한 바이너리 코드 라이센스("BCL")는 10년 이상 오라클 Java SE 기술의 기본 라이센스였습니다.BCL은 특정 조건 하에서 라이센스 수수료 없이 사용을 허용한다.향후 작업을 간소화하기 위해 오라클은 리눅스 플랫폼과 동일한 라이센스 모델을 사용하여 Java 9를 기준으로 오픈 소스 라이센스 OpenJDK 빌드를 제공하기 시작했다.오라클 Java SE 바이너리를 무료로 제공하는 데 익숙하다면, 오라클의 OpenJDK 빌드를 jdk.java.net에서 계속 사용할 수 있다.Oracle에서 상용 제품 또는 서비스의 일부로 Oracle Java SE 이진 파일을 가져오는 데 익숙하다면 My Oracle Support(MOS) 및 기타 위치를 통해 Oracle JDK 릴리스를 계속 받을 수 있다.
기능적으로 동일하고 상호 교환이 가능한...
오라클의 BCL 라이센스 JDK는 역사적으로 OpenJDK 빌드에서 사용할 수 없었던 "상업적 기능"을 포함하고 있었다.그러나 약속대로 지난 1년 동안 오라클은 다음과 같은 기능을 OpenJDK 커뮤니티에 제공했다.
따라서 Java 11 forward에서는 Oracle JDK 빌드와 OpenJDK 빌드가 기본적으로 동일할 것이다.
...미용과 포장재의 차이점들
소수의 차이점, 의도적이고 외적인 것들이 남아 있으며, 일부 이유는 단순히 OpenJDK 기고자들과 더 많은 시간을 논의할 수 있기 때문이다.
- Oracle JDK 11에서 -XX 사용 시 경고 발생:+UnlockCommercialFeatures 옵션인 반면 OpenJDK 빌드에서는 이 옵션이 오류를 발생시킨다.이 옵션은 결코 OpenJDK에 속하지 않았으며, OpenJDK에는 상업적 기능이 없기 때문에 지금 추가하는 것은 말이 되지 않는다.이러한 차이는 Oracle JDK 10 및 이전 릴리스의 사용자가 Oracle JDK 11 이상으로 쉽게 마이그레이션할 수 있도록 하기 위해 남아 있다.
- Oracle JDK 11은 별도의 상용 Oracle 제품인 "Advanced Management Console" 툴에 사용 로그 데이터를 제공하도록 구성할 수 있다.우리는 다른 OpenJDK 기고자들과 협력하여, 그러한 사용 데이터가 향후 릴리스에서 OpenJDK에서 어떻게 유용할 수 있는지에 대해 논의할 것이다.이러한 차이는 주로 오라클 고객에게 이러한 결정이 내려질 때까지 일관된 경험을 제공하기 위해 남는다.
- Javac --release 명령은 Java 9 및 Java 10 대상에 대해 다르게 동작하며, 이러한 대상에는 Oracle JDK에 해당하는 OpenJDK 릴리스에 포함되지 않은 일부 추가 모듈이 포함되어 있기 때문이다.
- 자바프스.베이스
- 자바프스.
- 자바프x.fxml
- 자바프스.
- 자바프스.미디어
- 자바프스.웹
- 자바.jnlp
- jdk.jfr
- jdk.management.cmm
- jdk.management.jfr
- jdk.management.properties
- jdk.packager.services.
- jdk.dk.dk
이러한 차이는 특정 유형의 기존 사용에 대해 일관된 경험을 제공하기 위해 남아 있다.이러한 모듈은 이제 OpenJFX의 일부로 별도로 제공되며, Oracle이 OpenJDK(예: Flying 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 Runtime Environment 18.9(빌드 11+28)
Java HotSpot(TM) 64비트 서버 VM 18.9(빌드 11+28, 혼합 모드)
OpenJDK 11 빌드의 경우:
openjdk 버전 "11" 2018-09-25
OpenJDK Runtime Environment 18.9(빌드 11+28)
OpenJDK 64-Bit Server VM 18.9(빌드 11+28, 혼합 모드)
- 오라클 JDK는 항상 알려진 인증서로 제3자 암호화 공급자를 서명하도록 요구해 왔다.OpenJDK의 암호 프레임워크는 개방형 암호 인터페이스를 가지고 있는데, 이는 어떤 제공자를 사용할 수 있는지 제한하지 않는다는 것을 의미한다.Oracle JDK 11은 유효한 서명이 계속 필요하며 Oracle OpenJDK 빌드는 유효한 서명 또는 서명되지 않은 타사 암호화 공급자를 계속 사용할 수 있도록 허용한다.
- Oracle JDK 11은 기존 데스크톱 사용과 일관된 경험을 위해 설치 프로그램, 브랜드 및 JRE 패키징을 지속적으로 포함할 예정이다.오라클 OpenJDK 빌드는 현재 zip 및 tar.gz 파일로 사용할 수 있으며, 대체 배포 형식이 고려되고 있다.
- 오라클은 3년마다 릴리즈를, 오픈JDK는 6개월마다 출시된다.
- 오라클은 릴리즈에 대한 장기적인 지원을 제공한다.반면 OpenJDK는 다음 버전이 나올 때까지만 릴리즈의 변경을 지원한다.
- Oracle JDK는 Oracle Binary Code License Agreement에 따라 라이센스가 부여된 반면, OpenJDK는 링크 예외로 GNU GPL(General Public License) 버전 2를 가지고 있다.
- 오라클 제품은 Flight Recorder, Java Mission Control, Application Class-Data Sharing 기능이 있고, OpenJDK는 Font Render 기능이 있다.또한 Oracle은 더 많은 가비지 컬렉션 옵션과 더 나은 렌더러를 가지고 있다.
- 오라클 JDK는 오라클 Corporation이 완전히 개발했으며, OpenJDK는 오라클, OpenJDK 및 Java Community가 개발했다.하지만 레드햇, 아줄시스템즈, IBM, 애플, SAP AG 등 일류 기업들도 개발에 적극 참여하고 있다.
Java 11에서 큰 변화로 전환
오라클, 오픈 소스 및 상용 라이센스 조합으로 과거 "BCL" 라이센스 변경
- -XX 사용 시 Java 11용 Oracle 키트에서 경고 발생:+UnlockCommercialFeatures 옵션인 반면 OpenJDK 빌드에서는 이 옵션이 오류를 발생시킨다.
- Oracle JDK는 "Advanced Management Console" 도구에 사용 로그 데이터를 제공하는 구성 제공
- 오라클은 항상 알려진 인증서로 제3자 암호화 제공자를 서명하도록 요구해 왔으며, OpenJDK의 암호화 프레임워크는 개방형 암호화 인터페이스를 가지고 있어 어떤 제공자를 사용할 수 있는지에 대한 제한이 없다.
- Oracle JDK 11은 설치 프로그램, 브랜딩 및 JRE 패키징을 계속 포함하며, OpenJDK 빌드는 현재 zip 및 tar.gz 파일로 제공됨
- Oracle 릴리스에 일부 추가 모듈이 있기 때문에 Java 9 및 Java 10 대상에 대해 javac –release 명령이 다르게 작동함
- Java –version 및 Java -fullversion 명령의 출력은 Oracle 빌드와 OpenJDK 빌드를 구분함
업데이트 : 2019년 8월 25일
자세한 내용은 oracle-vs-openjdk를 참조하십시오.
Oracle JDK 11과 OpenJDK 11 사이에 몇 가지 남아 있는 화장품 및 패키징 차이점 목록은 다음 블로그 게시물을 참조하십시오.
https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
요컨대:
- Oracle JDK 11에서 -XX 사용 시 경고 발생:+UnlockCommercialFeatures 옵션,
- 사용 로그 데이터를 "Advanced Management Console" 도구에 제공하도록 구성할 수 있으며,
- 그것은 항상 알려진 인증서에 의해 서명한 제3자 암호화 제공자를 요구해왔다.
- 설치자, 브랜딩, JRE 포장이 계속 포함될 것이다.
- javac --release 명령은 Java 9 및 Java 10 대상에 대해 약간 다르게 동작하는 반면,
- java --version 및 java -fullversion 명령의 출력은 오라클 JDK 빌드와 OpenJDK 빌드를 구분한다.
분명한 라이센스 차이 외에도 OpenJDK와 OracleJDK 11의 주요 차이점은 안정성 및 성능 업데이트다.
Source: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385
Every 6 months the two codebases will be in-sync. But during the 6 month window OpenJDK will only receive security updates while OracleJDK will receive additional stability and performance updates.
Given that update releases only occur every 3 months for both OpenJDK and OracleJDK this means that you are missing out on (at most) 3 months worth of fixes until the next major release comes out and you upgrade. However, if you choose to stick to LTS releases then a commercial license begins to make more sense.
Also for Java 8 an interesting performance benchmark for reactive (non-blocking) Spring Boot REST application being hosted on various JVMs by AMIS Technology Blog has been published in Nov 2018 showing that, among other differences:
- OpenJDK has higher CPU usage than OracleJDK,
- OpenJDK has slightly lower response time than OracleJDK,
- OpenJDK has higher memory usage than OracleJDK,
For details please see the source article.
Of course YMMV, this is just one of the benchmarks.
OpenJDK
- OpenJDK is opened source code, it is maintained and developed by Oracle, but allows communities and other companies to participate in this development, such as Red Hat, Azul Systems, IBM, Apple Inc, etc. OpenJDK is both a JDK product and a specification, any company or organization that wants to use OpenJDK to create a new variant must comply with those specifications. OpenJDK is developed by Oracle and the community contributions. We sometimes have issues on its stability; however, based on user feedback, it will be upgraded to perform better. OpenJDK is regularly updated, around every 6 months.
Oracle JDK
- Oracle JDK is maintained and developed by Oracle. It complies with OpenJDK specifications, but it is not opened source code. Oracle JDK is much better in terms of the JVM responsiveness and productivity. It focuses more on the stability due to its importance to the corporate customers.
Source: https://o7planning.org/12571/history-of-java-and-the-difference-between-oracle-jdk-and-openjdk
Oracle JDK는 프로덕션에서 사용할 수 없으므로, 회사를 위해 구축 중인 웹 애플리케이션에 대해 법적으로 사용할 수 없다는 것이 나의 이해다.나는 오픈JDK를 사용해야 해.내가 틀렸다면 고쳐줘!이 글에서.
Java 11을 시작으로 Oracle JDK는 개발 및 테스트 환경으로 제한된다.Oracle JDK는 상업적 지원을 구입하는 경우에만 프로덕션에서 사용할 수 있다.대신 오라클은 프로덕션에서 사용할 수 있는 OpenJDK 기반의 자바 빌드를 무료로 제공한다.그러나 공식 Oracle JDK의 경우 실제 로드맵은 다음과 같이 보일 것이다.
업데이트: 내가 틀렸어.Oracle JDK는 무료로 사용할 수 있지만 6 mos 이후에는 보안 업데이트를 받지 못하기 때문에 위험을 감수해야 할 것 같아.위의 링크된 기사 섹션을 보십시오. "새로운 출시 열차는 우리 회사에 어떤 의미가 있는가?"
매우 밀접하다 - 오라클 JDK 릴리즈의 빌드 프로세스는 오라클이 Java Plugin 및 Java WebStart를 구현하는 것을 포함하는 배포 코드와 같은 몇 개의 조각과 그래픽 래스터라이저와 같은 일부 비공개 소스 타사 구성 요소, Rin과 같은 일부 오픈 소스 타사 구성 요소를 추가함으로써 OpenJDK 7을 기반으로 구축된다.o, 그리고 여기 저기 몇 조각, 추가 설명서나 타사 글꼴 같은 것.앞으로 JRockit Mission Control(오라클 JDK에서는 아직 사용할 수 없음)과 같은 상업적 기능을 고려하는 요소를 제외한 Oracle JDK의 모든 부분을 오픈 소스 방식으로 열고, 인코딩된 타사 구성 요소를 오픈 소스 대안으로 교체하여 코드베이스 간의 보다 긴밀한 패리티를 달성하고자 한다.
· 예, 가비지 수집과 기타 JVM 파라미터는 동일함.
· GC의 성능은 양쪽 모두 동일하다.
참조URL: https://stackoverflow.com/questions/22358071/differences-between-oracle-jdk-and-openjdk
'IT이야기' 카테고리의 다른 글
Vue를 통해 모듈식 수입 확대 (0) | 2022.04.17 |
---|---|
C에서 기능 과부하를 달성하는 방법? (0) | 2022.04.17 |
서로 다른 .c 파일 간에 변수를 공유하려면 어떻게 해야 하는가? (0) | 2022.04.17 |
리눅스 c 프로그램에서 pthread의 스레드 ID를 얻는 방법? (0) | 2022.04.17 |
Vue.createApp이 작동하지 않지만 새 Vue() 방법으로 작동 중임 (0) | 2022.04.17 |